diff --git a/CppcheckTargets.cmake b/CppcheckTargets.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..8553e08acaa72849012bc6b1e4d3e1a914c0fcf4
--- /dev/null
+++ b/CppcheckTargets.cmake
@@ -0,0 +1,213 @@
+# - Run cppcheck on c++ source files as a custom target and a test
+#
+#  include(CppcheckTargets)
+#  add_cppcheck(<target-name> [UNUSED_FUNCTIONS] [STYLE] [POSSIBLE_ERROR] [FAIL_ON_WARNINGS]) -
+#    Create a target to check a target's sources with cppcheck and the indicated options
+#  add_cppcheck_sources(<target-name> [UNUSED_FUNCTIONS] [STYLE] [POSSIBLE_ERROR] [FAIL_ON_WARNINGS]) -
+#    Create a target to check standalone sources with cppcheck and the indicated options
+#
+# Requires these CMake modules:
+#  Findcppcheck
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__add_cppcheck)
+	return()
+endif()
+set(__add_cppcheck YES)
+
+if(NOT CPPCHECK_FOUND)
+	find_package(cppcheck QUIET)
+endif()
+
+if(CPPCHECK_FOUND)
+	if(NOT TARGET all_cppcheck)
+		add_custom_target(all_cppcheck)
+		set_target_properties(all_cppcheck PROPERTIES EXCLUDE_FROM_ALL TRUE)
+	endif()
+endif()
+
+function(add_cppcheck_sources _targetname)
+	if(CPPCHECK_FOUND)
+		set(_cppcheck_args)
+		set(_input ${ARGN})
+		list(FIND _input UNUSED_FUNCTIONS _unused_func)
+		if("${_unused_func}" GREATER "-1")
+			list(APPEND _cppcheck_args ${CPPCHECK_UNUSEDFUNC_ARG})
+			list(REMOVE_AT _input ${_unused_func})
+		endif()
+
+		list(FIND _input STYLE _style)
+		if("${_style}" GREATER "-1")
+			list(APPEND _cppcheck_args ${CPPCHECK_STYLE_ARG})
+			list(REMOVE_AT _input ${_style})
+		endif()
+
+		list(FIND _input POSSIBLE_ERROR _poss_err)
+		if("${_poss_err}" GREATER "-1")
+			list(APPEND _cppcheck_args ${CPPCHECK_POSSIBLEERROR_ARG})
+			list(REMOVE_AT _input ${_poss_err})
+		endif()
+
+		list(FIND _input FAIL_ON_WARNINGS _fail_on_warn)
+		if("${_fail_on_warn}" GREATER "-1")
+			list(APPEND
+				CPPCHECK_FAIL_REGULAR_EXPRESSION
+				${CPPCHECK_WARN_REGULAR_EXPRESSION})
+			list(REMOVE_AT _input ${_fail_on_warn})
+		endif()
+
+		set(_files)
+		foreach(_source ${_input})
+			get_source_file_property(_cppcheck_loc "${_source}" LOCATION)
+			if(_cppcheck_loc)
+				# This file has a source file property, carry on.
+				get_source_file_property(_cppcheck_lang "${_source}" LANGUAGE)
+				if("${_cppcheck_lang}" MATCHES "CXX")
+					list(APPEND _files "${_cppcheck_loc}")
+				endif()
+			else()
+				# This file doesn't have source file properties - figure it out.
+				get_filename_component(_cppcheck_loc "${_source}" ABSOLUTE)
+				if(EXISTS "${_cppcheck_loc}")
+					list(APPEND _files "${_cppcheck_loc}")
+				else()
+					message(FATAL_ERROR
+						"Adding CPPCHECK for file target ${_targetname}: "
+						"File ${_source} does not exist or needs a corrected path location "
+						"since we think its absolute path is ${_cppcheck_loc}")
+				endif()
+			endif()
+		endforeach()
+
+		if("1.${CMAKE_VERSION}" VERSION_LESS "1.2.8.0")
+			# Older than CMake 2.8.0
+			add_test(${_targetname}_cppcheck_test
+				"${CPPCHECK_EXECUTABLE}"
+				${CPPCHECK_TEMPLATE_ARG}
+				${_cppcheck_args}
+				${_files})
+		else()
+			# CMake 2.8.0 and newer
+			add_test(NAME
+				${_targetname}_cppcheck_test
+				COMMAND
+				"${CPPCHECK_EXECUTABLE}"
+				${CPPCHECK_TEMPLATE_ARG}
+				${_cppcheck_args}
+				${_files})
+		endif()
+
+		set_tests_properties(${_targetname}_cppcheck_test
+			PROPERTIES
+			FAIL_REGULAR_EXPRESSION
+			"${CPPCHECK_FAIL_REGULAR_EXPRESSION}")
+
+		add_custom_command(TARGET
+			all_cppcheck
+			PRE_BUILD
+			COMMAND
+			${CPPCHECK_EXECUTABLE}
+			${CPPCHECK_QUIET_ARG}
+			${CPPCHECK_TEMPLATE_ARG}
+			${_cppcheck_args}
+			${_files}
+			WORKING_DIRECTORY
+			"${CMAKE_CURRENT_SOURCE_DIR}"
+			COMMENT
+			"${_targetname}_cppcheck: Running cppcheck on target ${_targetname}..."
+			VERBATIM)
+	endif()
+endfunction()
+
+function(add_cppcheck _name)
+	if(NOT TARGET ${_name})
+		message(FATAL_ERROR
+			"add_cppcheck given a target name that does not exist: '${_name}' !")
+	endif()
+	if(CPPCHECK_FOUND)
+		set(_cppcheck_args)
+
+		list(FIND ARGN UNUSED_FUNCTIONS _unused_func)
+		if("${_unused_func}" GREATER "-1")
+			list(APPEND _cppcheck_args ${CPPCHECK_UNUSEDFUNC_ARG})
+		endif()
+
+		list(FIND ARGN STYLE _style)
+		if("${_style}" GREATER "-1")
+			list(APPEND _cppcheck_args ${CPPCHECK_STYLE_ARG})
+		endif()
+
+		list(FIND ARGN POSSIBLE_ERROR _poss_err)
+		if("${_poss_err}" GREATER "-1")
+			list(APPEND _cppcheck_args ${CPPCHECK_POSSIBLEERROR_ARG})
+		endif()
+
+		list(FIND _input FAIL_ON_WARNINGS _fail_on_warn)
+		if("${_fail_on_warn}" GREATER "-1")
+			list(APPEND
+				CPPCHECK_FAIL_REGULAR_EXPRESSION
+				${CPPCHECK_WARN_REGULAR_EXPRESSION})
+			list(REMOVE_AT _input ${_unused_func})
+		endif()
+
+		get_target_property(_cppcheck_sources "${_name}" SOURCES)
+		set(_files)
+		foreach(_source ${_cppcheck_sources})
+			get_source_file_property(_cppcheck_lang "${_source}" LANGUAGE)
+			get_source_file_property(_cppcheck_loc "${_source}" LOCATION)
+			if("${_cppcheck_lang}" MATCHES "CXX")
+				list(APPEND _files "${_cppcheck_loc}")
+			endif()
+		endforeach()
+
+		if("1.${CMAKE_VERSION}" VERSION_LESS "1.2.8.0")
+			# Older than CMake 2.8.0
+			add_test(${_name}_cppcheck_test
+				"${CPPCHECK_EXECUTABLE}"
+				${CPPCHECK_TEMPLATE_ARG}
+				${_cppcheck_args}
+				${_files})
+		else()
+			# CMake 2.8.0 and newer
+			add_test(NAME
+				${_name}_cppcheck_test
+				COMMAND
+				"${CPPCHECK_EXECUTABLE}"
+				${CPPCHECK_TEMPLATE_ARG}
+				${_cppcheck_args}
+				${_files})
+		endif()
+
+		set_tests_properties(${_name}_cppcheck_test
+			PROPERTIES
+			FAIL_REGULAR_EXPRESSION
+			"${CPPCHECK_FAIL_REGULAR_EXPRESSION}")
+
+		add_custom_command(TARGET
+			all_cppcheck
+			PRE_BUILD
+			COMMAND
+			${CPPCHECK_EXECUTABLE}
+			${CPPCHECK_QUIET_ARG}
+			${CPPCHECK_TEMPLATE_ARG}
+			${_cppcheck_args}
+			${_files}
+			WORKING_DIRECTORY
+			"${CMAKE_CURRENT_SOURCE_DIR}"
+			COMMENT
+			"${_name}_cppcheck: Running cppcheck on target ${_name}..."
+			VERBATIM)
+	endif()
+
+endfunction()
diff --git a/DoxygenTargets.cmake b/DoxygenTargets.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..ce98a917076b72f9924ebe250c9a447bf208c6b5
--- /dev/null
+++ b/DoxygenTargets.cmake
@@ -0,0 +1,311 @@
+# - Run doxygen on source files as a custom target
+#
+#  include(DoxygenTargets)
+#  add_doxygen(<doxyfile> [OUTPUT_DIRECTORY <outputdir>]
+#   [INSTALL_DESTINATION <installdir>
+#   [INSTALL_COMPONENT <installcomponent>]
+#   [INSTALL_PDF_NAME <installpdfname>] ]
+#   [DOC_TARGET <targetname>]
+#   [PROJECT_NUMBER <versionnumber>]
+#   [NO_WARNINGS]
+#   [NO_PDF])
+#
+# Requires these CMake modules:
+#  FindDoxygen
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__add_doxygen)
+	return()
+endif()
+set(__add_doxygen YES)
+
+# We must run the following at "include" time, not at function call time,
+# to find the path to this module rather than the path to a calling list file
+get_filename_component(_doxygenmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+
+if(APPLE)
+	list(APPEND CMAKE_PREFIX_PATH "/usr/texbin")
+endif()
+
+if(NOT DOXYGEN_FOUND)
+	find_package(Doxygen QUIET)
+endif()
+
+set(DOXYGEN_LATEX "NO")
+set(DOXYGEN_PDFLATEX "NO")
+set(DOXYGEN_DOT "NO")
+
+if(DOXYGEN_DOT_EXECUTABLE)
+	set(DOXYGEN_DOT "YES")
+endif()
+
+find_package(LATEX QUIET)
+if(LATEX_COMPILER AND MAKEINDEX_COMPILER)
+	set(DOXYGEN_LATEX "YES")
+endif()
+
+if(PDFLATEX_COMPILER)
+	set(DOXYGEN_PDFLATEX "YES")
+endif()
+
+# An optional single-file install that supports cmake older than 2.8.0
+# For internal use
+function(_dt_install_file target filename dest rename)
+	if(CMAKE_VER VERSION_LESS 2.8.0)
+		set(INSTALL_CODE  "
+			if(EXISTS \"${filename}\")
+				message(STATUS \"Found: ${filename}\")
+				file(INSTALL
+					DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${dest}\"
+					TYPE FILE
+					RENAME \"${rename}\"
+					FILES \"${filename}\")
+			else()
+				message(STATUS \"Skipping (build '${target}' to create): ${filename}\")
+			endif()
+			")
+		if(NOT ARGN STREQUAL "")
+			set(INSTALL_COMPONENT "${ARGN}")
+			set(INSTALL_CODE "
+			if(NOT CMAKE_INSTALL_COMPONENT OR \"\${CMAKE_INSTALL_COMPONENT}\" STREQUAL \"${INSTALL_COMPONENT}\")
+				${INSTALL_CODE}
+			endif()
+			")
+		endif()
+		install(CODE "${INSTALL_CODE}")
+	else()
+		set(COMPONENT_ARGS)
+		if(NOT ARGN STREQUAL "")
+			set(COMPONENT_ARGS COMPONENT "${ARGN}")
+		endif()
+		install(FILES
+			"${filename}"
+			DESTINATION
+			"${dest}"
+			RENAME "${rename}"
+			${COMPONENT_ARGS}
+			OPTIONAL)
+	endif()
+
+endfunction()
+
+# An optional single-directory install that supports cmake older than 2.8.0
+# For internal use
+function(_dt_install_dir target dir dest)
+	if(CMAKE_VER VERSION_LESS 2.8.0)
+		set(INSTALL_CODE  "
+			if(EXISTS \"${dir}\")
+				message(STATUS \"Found: ${dir}\")
+				file(INSTALL
+					DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${dest}\"
+					TYPE DIRECTORY
+					FILES \"${dir}\")
+			else()
+				message(STATUS \"Skipping (build '${target}' to create): ${dir}\")
+			endif()
+			")
+		if(NOT ARGN STREQUAL "")
+			set(INSTALL_COMPONENT "${ARGN}")
+			set(INSTALL_CODE "
+
+			if(NOT CMAKE_INSTALL_COMPONENT OR \"\${CMAKE_INSTALL_COMPONENT}\" STREQUAL \"${INSTALL_COMPONENT}\")
+				${INSTALL_CODE}
+			endif()
+			")
+		endif()
+		install(CODE "${INSTALL_CODE}")
+	else()
+		set(COMPONENT_ARGS)
+		if(NOT ARGN STREQUAL "")
+			set(COMPONENT_ARGS COMPONENT "${ARGN}")
+		endif()
+		install(DIRECTORY
+			"${dir}"
+			DESTINATION
+			"${dest}"
+			${COMPONENT_ARGS}
+			OPTIONAL)
+	endif()
+
+endfunction()
+
+function(add_doxygen _doxyfile)
+	# parse arguments
+	set(WARNINGS YES)
+	set(_nowhere)
+	set(_curdest _nowhere)
+	set(_val_args
+		OUTPUT_DIRECTORY
+		DOC_TARGET
+		INSTALL_DESTINATION
+		INSTALL_COMPONENT
+		INSTALL_PDF_NAME
+		PROJECT_NUMBER)
+	set(_bool_args
+		NO_WARNINGS
+		NO_PDF)
+	foreach(_arg ${_val_args} ${_bool_args})
+		set(${_arg})
+	endforeach()
+	foreach(_element ${ARGN})
+		list(FIND _val_args "${_element}" _val_arg_find)
+		list(FIND _bool_args "${_element}" _bool_arg_find)
+		if("${_val_arg_find}" GREATER "-1")
+			set(_curdest "${_element}")
+		elseif("${_bool_arg_find}" GREATER "-1")
+			set("${_element}" ON)
+			set(_curdest _nowhere)
+		else()
+			list(APPEND ${_curdest} "${_element}")
+		endif()
+	endforeach()
+
+	if(_nowhere)
+		message(FATAL_ERROR "Syntax error in use of add_doxygen!")
+	endif()
+
+	if(NO_WARNINGS)
+		set(WARNINGS NO)
+	endif()
+
+	if(NOT DOC_TARGET)
+		set(DOC_TARGET doc)
+	endif()
+
+	if(NOT OUTPUT_DIRECTORY)
+		set(OUTPUT_DIRECTORY "docs-generated")
+	endif()
+
+	file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIRECTORY}")
+
+	if(NOT INSTALL_PDF_NAME)
+		set(INSTALL_PDF_NAME "docs-generated.pdf")
+	endif()
+
+	if(NOT PROJECT_NUMBER)
+		set(PROJECT_NUMBER "${CPACK_PACKAGE_VERSION}")
+	endif()
+
+	if(DOXYGEN_FOUND)
+		if(NOT TARGET ${DOC_TARGET})
+
+			if(NOT IN_DASHBOARD_SCRIPT)
+				add_custom_target(${DOC_TARGET})
+				set_target_properties(${DOC_TARGET}
+					PROPERTIES
+					EXCLUDE_FROM_ALL
+					TRUE)
+				set_target_properties(${DOC_TARGET}
+					PROPERTIES
+					EXCLUDE_FROM_DEFAULT_BUILD
+					TRUE)
+			else()
+				add_custom_target(${DOC_TARGET} ALL)
+			endif()
+		endif()
+
+		if(NOT IS_ABSOLUTE "${OUTPUT_DIRECTORY}")
+			get_filename_component(OUTPUT_DIRECTORY
+				"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIRECTORY}"
+				ABSOLUTE)
+		endif()
+
+		set_property(DIRECTORY
+			APPEND
+			PROPERTY
+			ADDITIONAL_MAKE_CLEAN_FILES
+			"${OUTPUT_DIRECTORY}/html"
+			"${OUTPUT_DIRECTORY}/latex")
+
+		get_filename_component(_doxyfileabs "${_doxyfile}" ABSOLUTE)
+		get_filename_component(INCLUDE_FILE "${_doxyfileabs}" NAME)
+		get_filename_component(INCLUDE_PATH "${_doxyfileabs}" PATH)
+
+		# Doesn't currently work on Windows, so don't bother
+		if(DOXYGEN_LATEX AND NOT NO_PDF AND NOT WIN32)
+			set(MAKE_PDF YES)
+			set(GENERATE_LATEX YES)
+		else()
+			set(MAKE_PDF NO)
+			set(GENERATE_LATEX NO)
+		endif()
+
+		if(DOXYGEN_PDFLATEX AND MAKE_PDF)
+			set(USE_PDFLATEX YES)
+		else()
+			set(USE_PDFLATEX NO)
+		endif()
+
+		if(DOXYGEN_DOT)
+			set(HAVE_DOT YES)
+			set(DOT_PATH ${DOXYGEN_DOT_PATH})
+		else()
+			set(HAVE_DOT NO)
+			set(DOT_PATH)
+		endif()
+
+		# See http://www.cmake.org/pipermail/cmake/2006-August/010786.html
+		# for info on this variable
+		if("${CMAKE_BUILD_TOOL}" MATCHES "(msdev|devenv)")
+			set(WARN_FORMAT "\"$file($line) : $text \"")
+		else()
+			set(WARN_FORMAT "\"$file:$line: $text \"")
+		endif()
+
+		configure_file("${_doxygenmoddir}/DoxygenTargets.doxyfile.in"
+			"${CMAKE_CURRENT_BINARY_DIR}/${_doxyfile}.additional"
+			@ONLY)
+
+		add_custom_command(TARGET
+			${DOC_TARGET}
+			COMMAND
+			${DOXYGEN_EXECUTABLE}
+			"${CMAKE_CURRENT_BINARY_DIR}/${_doxyfile}.additional"
+			WORKING_DIRECTORY
+			"${CMAKE_CURRENT_SOURCE_DIR}"
+			#MAIN_DEPENDENCY ${DOC_TARGET}
+			COMMENT
+			"Running Doxygen with configuration ${_doxyfile}..."
+			VERBATIM)
+
+		if(MAKE_PDF)
+			add_custom_command(TARGET
+				${DOC_TARGET}
+				POST_BUILD
+				COMMAND
+				${CMAKE_MAKE_PROGRAM}
+				WORKING_DIRECTORY
+				"${OUTPUT_DIRECTORY}/latex"
+				COMMENT
+				"Generating PDF using PDFLaTeX..."
+				VERBATIM)
+		endif()
+
+		if(INSTALL_DESTINATION)
+			if(INSTALL_COMPONENT)
+				_dt_install_dir("${DOC_TARGET}" "${OUTPUT_DIRECTORY}/html" "${INSTALL_DESTINATION}" "${INSTALL_COMPONENT}")
+				if(MAKE_PDF)
+					_dt_install_file("${DOC_TARGET}" "${OUTPUT_DIRECTORY}/latex/refman.pdf" "${INSTALL_DESTINATION}" "${INSTALL_PDF_NAME}" "${INSTALL_COMPONENT}")
+				endif()
+
+			else()
+				_dt_install_dir("${DOC_TARGET}" "${OUTPUT_DIRECTORY}/html" "${INSTALL_DESTINATION}")
+				if(MAKE_PDF)
+					_dt_install_file("${DOC_TARGET}" "${OUTPUT_DIRECTORY}/latex/refman.pdf" "${INSTALL_DESTINATION}" "${INSTALL_PDF_NAME}")
+				endif()
+			endif()
+		endif()
+
+	endif()
+endfunction()
diff --git a/DoxygenTargets.doxyfile.in b/DoxygenTargets.doxyfile.in
new file mode 100644
index 0000000000000000000000000000000000000000..e08f56eae668a2f557d7f8ef7e38c64901e43e7c
--- /dev/null
+++ b/DoxygenTargets.doxyfile.in
@@ -0,0 +1,18 @@
+@INCLUDE_PATH = "@INCLUDE_PATH@"
+@INCLUDE = "@INCLUDE_FILE@"
+
+OUTPUT_DIRECTORY = "@OUTPUT_DIRECTORY@"
+GENERATE_LATEX = "@GENERATE_LATEX@"
+USE_PDFLATEX = @USE_PDFLATEX@
+HAVE_DOT = @HAVE_DOT@
+DOT_PATH = "@DOT_PATH@"
+LATEX_CMD_NAME = "@LATEX_COMPILER@"
+MAKEINDEX_CMD_NAME = "@MAKEINDEX_COMPILER@"
+
+WARNINGS = @WARNINGS@
+WARN_FORMAT = @WARN_FORMAT@
+
+PROJECT_NUMBER = @PROJECT_NUMBER@
+
+LATEX_BATCHMODE = YES
+QUIET = YES
diff --git a/EnableExtraCompilerWarnings.cmake b/EnableExtraCompilerWarnings.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..5b973524c2ce06ac8927fd7cea725326633bc5de
--- /dev/null
+++ b/EnableExtraCompilerWarnings.cmake
@@ -0,0 +1,78 @@
+# - Add flags to compile with extra warnings
+#
+#  enable_extra_compiler_warnings(<targetname>)
+#  globally_enable_extra_compiler_warnings() - to modify CMAKE_CXX_FLAGS, etc
+#    to change for all targets declared after the command, instead of per-command
+#
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__enable_extra_compiler_warnings)
+	return()
+endif()
+set(__enable_extra_compiler_warnings YES)
+
+macro(_enable_extra_compiler_warnings_flags)
+	set(_flags)
+	if(MSVC)
+		option(COMPILER_WARNINGS_EXTREME
+			"Use compiler warnings that are probably overkill."
+			off)
+		mark_as_advanced(COMPILER_WARNINGS_EXTREME)
+		set(_flags "/W4")
+		if(COMPILER_WARNINGS_EXTREME)
+			set(_flags "${_flags} /Wall /wd4619 /wd4668 /wd4820 /wd4571 /wd4710")
+		endif()
+	else()
+		include(CheckCXXCompilerFlag)
+		set(_flags)
+
+		check_cxx_compiler_flag(-W SUPPORTS_W_FLAG)
+		if(SUPPORTS_W_FLAG)
+			set(_flags "${_flags} -W")
+		endif()
+
+		check_cxx_compiler_flag(-Wall SUPPORTS_WALL_FLAG)
+		if(SUPPORTS_WALL_FLAG)
+			set(_flags "${_flags} -Wall")
+		endif()
+
+		check_cxx_compiler_flag(-Wextra SUPPORTS_WEXTRA_FLAG)
+		if(SUPPORTS_WEXTRA_FLAG)
+			set(_flags "${_flags} -Wextra")
+		endif()
+	endif()
+endmacro()
+
+function(enable_extra_compiler_warnings _target)
+	_enable_extra_compiler_warnings_flags()
+	get_target_property(_origflags ${_target} COMPILE_FLAGS)
+	if(_origflags)
+		set_property(TARGET
+			${_target}
+			PROPERTY
+			COMPILE_FLAGS
+			"${_flags} ${_origflags}")
+	else()
+		set_property(TARGET
+			${_target}
+			PROPERTY
+			COMPILE_FLAGS
+			"${_flags}")
+	endif()
+
+endfunction()
+
+function(globally_enable_extra_compiler_warnings)
+	_enable_extra_compiler_warnings_flags()
+	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" PARENT_SCOPE)
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" PARENT_SCOPE)
+endfunction()
diff --git a/EnableProfiling.cmake b/EnableProfiling.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e2a340f7c83dacd3cd30e365aba4699bb96a7809
--- /dev/null
+++ b/EnableProfiling.cmake
@@ -0,0 +1,56 @@
+# - Add flags to compile with profiling support - currently only for GCC
+#
+#  enable_profiling(<targetname>)
+#  globally_enable_profiling() - to modify CMAKE_CXX_FLAGS, etc
+#    to change for all targets declared after the command, instead of per-command
+#
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__enable_profiling)
+	return()
+endif()
+set(__enable_profiling YES)
+
+macro(_enable_profiling_flags)
+	set(_flags)
+	if(MSVC)
+		# TODO: what kind of flags are needed to profile on MSVC?
+		#set(_flags /W4)
+	elseif(CMAKE_COMPILER_IS_GNUCXX)
+		set(_flags "-p")
+	endif()
+endmacro()
+
+function(enable_profiling _target)
+	_enable_profiling_flags()
+	get_target_property(_origflags ${_target} COMPILE_FLAGS)
+	if(_origflags)
+		set_property(TARGET
+			${_target}
+			PROPERTY
+			COMPILE_FLAGS
+			"${_flags} ${_origflags}")
+	else()
+		set_property(TARGET
+			${_target}
+			PROPERTY
+			COMPILE_FLAGS
+			"${_flags}")
+	endif()
+
+endfunction()
+
+function(globally_enable_profiling)
+	_enable_profiling_flags()
+	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" PARENT_SCOPE)
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" PARENT_SCOPE)
+endfunction()
diff --git a/FileCopyTargets.cmake b/FileCopyTargets.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d92df16a3083f62586ab2efda4bfee038eee1120
--- /dev/null
+++ b/FileCopyTargets.cmake
@@ -0,0 +1,101 @@
+# - Add a target for files that just need to be copied
+#
+#  include(FileCopyTargets)
+#  add_file_copy_target(<target_name> <directory to copy to> <filename> [<filename>...])
+#    Creates a custom target that copies the files to a directory, if needed.
+#    Relative paths for the destination directory are considered with
+#    with respect to CMAKE_CURRENT_BINARY_DIR
+#    You can use this target in all the usual ways, including
+#    add_dependencies(some_other_target this_target) to specify that another
+#    target depends on this.
+#
+#  install_file_copy_target(<target_name> [arguments to INSTALL(PROGRAMS ...) ])
+#    Works just the same as INSTALL(PROGRAMS ...) because it wraps it to install
+#    the files you specified in add_file_copy_target
+#
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__add_file_copy_target)
+	return()
+endif()
+set(__add_file_copy_target YES)
+
+define_property(TARGET
+	PROPERTY
+	FILE_COPY_TARGET
+	BRIEF_DOCS
+	"File Copy target"
+	FULL_DOCS
+	"Is this a target created by add_file_copy_target?")
+
+function(add_file_copy_target _target _dest)
+	if(NOT ARGN)
+		message(WARNING
+			"In add_file_copy_target call for target ${_target}, no source files were specified!")
+		return()
+	endif()
+
+	set(ALLFILES)
+	set(SOURCES)
+	foreach(fn ${ARGN})
+		# Produce an absolute path to the input file
+		if(IS_ABSOLUTE "${fn}")
+			get_filename_component(fullpath "${fn}" ABSOLUTE)
+			get_filename_component(fn "${fn}" NAME)
+		else()
+			get_filename_component(fullpath "${CMAKE_CURRENT_SOURCE_DIR}/${fn}" ABSOLUTE)
+		endif()
+
+		# Clean up output file name
+		get_filename_component(absout "${_dest}/${fn}" ABSOLUTE)
+
+		add_custom_command(OUTPUT "${absout}"
+			COMMAND
+			${CMAKE_COMMAND}
+			ARGS -E make_directory "${_dest}"
+			COMMAND
+			${CMAKE_COMMAND}
+			ARGS -E copy "${fullpath}" "${_dest}"
+			MAIN_DEPENDENCY "${fullpath}"
+			VERBATIM
+			COMMENT "Copying ${fn} to ${absout}")
+		list(APPEND SOURCES "${fullpath}")
+		list(APPEND ALLFILES "${absout}")
+	endforeach()
+
+	# Custom target depending on all the file copy commands
+	add_custom_target(${_target}
+		SOURCES ${SOURCES}
+		DEPENDS ${ALLFILES})
+
+	set_property(TARGET ${_target} PROPERTY FILE_COPY_TARGET YES)
+endfunction()
+
+function(install_file_copy_target _target)
+	get_target_property(_isFCT ${_target} FILE_COPY_TARGET)
+	if(NOT _isFCT)
+		message(WARNING
+			"install_file_copy_target called on a target not created with add_file_copy_target!")
+		return()
+	endif()
+
+	# Get sources
+	get_target_property(_srcs ${_target} SOURCES)
+
+	# Remove the "fake" file forcing build
+	list(REMOVE_AT _srcs 0)
+
+	# Forward the call to install
+	install(PROGRAMS ${_srcs} ${ARGN})
+endfunction()
diff --git a/FindGDB.cmake b/FindGDB.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..a5f743da608044adcb2f3fa2ff935fd86e90f606
--- /dev/null
+++ b/FindGDB.cmake
@@ -0,0 +1,60 @@
+# - Try to find GDB
+#
+# Once done, this will define:
+#  GDB_FOUND - system has GDB
+#  GDB_COMMAND - the command to run
+#  GDB_VERSION - version
+#  GDB_HAS_RETURN_CHILD_RESULT - if the --return-child-result flag is supported
+#
+# Useful configuration variables you might want to add to your cache:
+#  GDB_ROOT_DIR - A directory prefix to search
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+set(GDB_ROOT_DIR
+	"${GDB_ROOT_DIR}"
+	CACHE
+	PATH
+	"Directory to start our search in")
+
+find_program(GDB_COMMAND
+	NAMES
+	gdb
+	HINTS
+	"${GDB_ROOT_DIR}"
+	PATH_SUFFIXES
+	bin
+	libexec)
+
+if(GDB_COMMAND)
+	execute_process(COMMAND gdb --version
+		COMMAND head -n 1
+		OUTPUT_VARIABLE GDB_VERSION
+		OUTPUT_STRIP_TRAILING_WHITESPACE)
+	string(REGEX REPLACE "[^0-9]*([0-9]+[0-9.]*).*" "\\1" GDB_VERSION "${GDB_VERSION}")
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GDB DEFAULT_MSG GDB_COMMAND GDB_VERSION)
+
+if(GDB_FOUND)
+	mark_as_advanced(GDB_ROOT_DIR)
+	if(GDB_VERSION VERSION_LESS 6.4)
+		set(GDB_HAS_RETURN_CHILD_RESULT FALSE)
+	else()
+		set(GDB_HAS_RETURN_CHILD_RESULT TRUE)
+	endif()
+endif()
+
+mark_as_advanced(GDB_COMMAND)
diff --git a/FindLAPACKLibs.cmake b/FindLAPACKLibs.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..51d0c41dd2a630f691405dd1a7caa4ac3ff347aa
--- /dev/null
+++ b/FindLAPACKLibs.cmake
@@ -0,0 +1,91 @@
+# - Try to find LAPACK and BLAS libraries
+# Once done, this will define
+#  LAPACKLIBS_LIBRARIES, all libraries to link against
+#  LAPACKLIBS_FOUND, If false, do not try to use LAPACK library features.
+#
+# Users may wish to set:
+#  LAPACKLIBS_ROOT_DIR, location to start searching for LAPACK libraries
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(_check)
+
+set(LAPACKLIBS_ROOT_DIR
+	"${LAPACKLIBS_ROOT_DIR}"
+	CACHE
+	PATH
+	"Directory to search for LAPACK libraries")
+
+if(APPLE)
+	find_library(LAPACKLIBS_VECLIB_FRAMEWORK veclib)
+	find_library(LAPACKLIBS_ACCELERATE_FRAMEWORK accelerate)
+	mark_as_advanced(LAPACKLIBS_VECLIB_FRAMEWORK
+		LAPACKLIBS_ACCELERATE_FRAMEWORK)
+
+	set(LAPACKLIBS_LIBRARIES
+		"${LAPACKLIBS_VECLIB_FRAMEWORK}"
+		"${LAPACKLIBS_ACCELERATE_FRAMEWORK}")
+	list(APPEND
+		_check
+		LAPACKLIBS_VECLIB_FRAMEWORK
+		LAPACKLIBS_ACCELERATE_FRAMEWORK)
+elseif(WIN32)
+	# Tested to work with the files from http://www.fi.muni.cz/~xsvobod2/misc/lapack/
+	# You might also see http://icl.cs.utk.edu/lapack-for-windows/clapack/index.html for
+	# the libraries and headers.
+
+	# Good luck!
+
+	find_library(LAPACKLIBS_LAPACK_LIBRARY
+		NAMES
+		lapack_win32_MT
+		lapack
+		lapackd
+		HINTS
+		${LAPACKLIBS_ROOT_DIR}
+		PATH_SUFFIXES
+		lapack-MT-release
+		lapack-MT-debug
+		lib)
+	find_library(LAPACKLIBS_BLAS_LIBRARY
+		NAMES
+		blas_win32_MT
+		blas
+		blasd
+		HINTS
+		${LAPACKLIBS_ROOT_DIR}
+		PATH_SUFFIXES
+		lapack-MT-release
+		lapack-MT-debug
+		lib)
+	set(LAPACKLIBS_LIBRARIES
+		"${LAPACKLIBS_LAPACK_LIBRARY}"
+		"${LAPACKLIBS_BLAS_LIBRARY}")
+	list(APPEND _check LAPACKLIBS_LAPACK_LIBRARY LAPACKLIBS_BLAS_LIBRARY)
+elseif(UNIX)
+	# All other Linux/Unix should have lapack without a fuss
+	list(APPEND _check LAPACKLIBS_LAPACK_LIBRARY)
+	find_library(LAPACKLIBS_LAPACK_LIBRARY lapack)
+	set(LAPACKLIBS_LIBRARIES "${LAPACKLIBS_LAPACK_LIBRARY}")
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LAPACKLibs
+	DEFAULT_MSG
+	${_check})
+
+if(LAPACKLIBS_FOUND)
+	mark_as_advanced(LAPACKLIBS_ROOT_DIR
+		LAPACKLIBS_LAPACK_LIBRARY
+		LAPACKLIBS_BLAS_LIBRARY)
+endif()
diff --git a/FindVRPN.cmake b/FindVRPN.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..b2dabc6c086db76ae19c4f07bdfca20439f22840
--- /dev/null
+++ b/FindVRPN.cmake
@@ -0,0 +1,124 @@
+# - try to find VRPN library
+#
+# Cache Variables:
+#  VRPN_LIBRARY
+#  VRPN_SERVER_LIBRARY
+#  VRPN_INCLUDE_DIR
+#
+# Non-cache variables you might use in your CMakeLists.txt:
+#  VRPN_FOUND
+#  VRPN_SERVER_LIBRARIES
+#  VRPN_LIBRARIES
+#  VRPN_INCLUDE_DIRS
+#
+# VRPN_ROOT_DIR is searched preferentially for these files
+#
+# Requires these CMake modules:
+#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(VRPN_ROOT_DIR
+	"${VRPN_ROOT_DIR}"
+	CACHE
+	PATH
+	"Root directory to search for VRPN")
+
+if("${CMAKE_SIZEOF_VOID_P}" MATCHES "8")
+	set(_libsuffixes lib64 lib)
+
+	# 64-bit dir: only set on win64
+	file(TO_CMAKE_PATH "$ENV{ProgramW6432}" _progfiles)
+else()
+	set(_libsuffixes lib)
+	if(NOT "$ENV{ProgramFiles(x86)}" STREQUAL "")
+		# 32-bit dir: only set on win64
+		file(TO_CMAKE_PATH "$ENV{ProgramFiles(x86)}" _progfiles)
+	else()
+		# 32-bit dir on win32, useless to us on win64
+		file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _progfiles)
+	endif()
+endif()
+
+###
+# Configure VRPN
+###
+
+find_path(VRPN_INCLUDE_DIR
+	NAMES
+	vrpn_Connection.h
+	PATH_SUFFIXES
+	include
+	include/vrpn
+	HINTS
+	"${VRPN_ROOT_DIR}"
+	PATHS
+	"${_progfiles}/VRPN")
+
+find_library(VRPN_LIBRARY
+	NAMES
+	vrpn
+	PATH_SUFFIXES
+	${_libsuffixes}
+	HINTS
+	"${VRPN_ROOT_DIR}"
+	PATHS
+	"${_progfiles}/VRPN")
+
+find_library(VRPN_SERVER_LIBRARY
+	NAMES
+	vrpnserver
+	PATH_SUFFIXES
+	${_libsuffixes}
+	HINTS
+	"${VRPN_ROOT_DIR}"
+	PATHS
+	"${_progfiles}/VRPN")
+
+###
+# Dependencies
+###
+set(_deps_libs)
+set(_deps_includes)
+set(_deps_check)
+
+find_package(quatlib)
+list(APPEND _deps_libs ${QUATLIB_LIBRARIES})
+list(APPEND _deps_includes ${QUATLIB_INCLUDE_DIRS})
+list(APPEND _deps_check QUATLIB_FOUND)
+
+if(NOT WIN32)
+	find_package(Threads)
+	list(APPEND _deps_libs ${CMAKE_THREAD_LIBS_INIT})
+	list(APPEND _deps_check CMAKE_HAVE_THREADS_LIBRARY)
+endif()
+
+
+# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(VRPN
+	DEFAULT_MSG
+	VRPN_LIBRARY
+	VRPN_INCLUDE_DIR
+	${_deps_check})
+
+if(VRPN_FOUND)
+	set(VRPN_INCLUDE_DIRS "${VRPN_INCLUDE_DIR}" ${_deps_includes})
+	set(VRPN_LIBRARIES "${VRPN_LIBRARY}" ${_deps_libs})
+	set(VRPN_SERVER_LIBRARIES "${VRPN_SERVER_LIBRARY}" ${_deps_libs})
+
+	mark_as_advanced(VRPN_ROOT_DIR)
+endif()
+
+mark_as_advanced(VRPN_LIBRARY
+	VRPN_SERVER_LIBRARY
+	VRPN_INCLUDE_DIR)
diff --git a/Findcppcheck.cmake b/Findcppcheck.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..fe5e32c0b2610a419fa73de0c3109add375d1cb2
--- /dev/null
+++ b/Findcppcheck.cmake
@@ -0,0 +1,160 @@
+# - try to find cppcheck tool
+#
+# Cache Variables:
+#  CPPCHECK_EXECUTABLE
+#
+# Non-cache variables you might use in your CMakeLists.txt:
+#  CPPCHECK_FOUND
+#  CPPCHECK_POSSIBLEERROR_ARG
+#  CPPCHECK_UNUSEDFUNC_ARG
+#  CPPCHECK_STYLE_ARG
+#  CPPCHECK_QUIET_ARG
+#  CPPCHECK_INCLUDEPATH_ARG
+#  CPPCHECK_FAIL_REGULAR_EXPRESSION
+#  CPPCHECK_WARN_REGULAR_EXPRESSION
+#  CPPCHECK_MARK_AS_ADVANCED - whether to mark our vars as advanced even
+#    if we don't find this program.
+#
+# Requires these CMake modules:
+#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+file(TO_CMAKE_PATH "${CPPCHECK_ROOT_DIR}" CPPCHECK_ROOT_DIR)
+set(CPPCHECK_ROOT_DIR
+	"${CPPCHECK_ROOT_DIR}"
+	CACHE
+	PATH
+	"Path to search for cppcheck")
+
+# cppcheck app bundles on Mac OS X are GUI, we want command line only
+set(_oldappbundlesetting ${CMAKE_FIND_APPBUNDLE})
+set(CMAKE_FIND_APPBUNDLE NEVER)
+
+if(CPPCHECK_EXECUTABLE AND NOT EXISTS "${CPPCHECK_EXECUTABLE}")
+	set(CPPCHECK_EXECUTABLE "notfound" CACHE PATH FORCE "")
+endif()
+
+# If we have a custom path, look there first.
+if(CPPCHECK_ROOT_DIR)
+	find_program(CPPCHECK_EXECUTABLE
+		NAMES
+		cppcheck
+		cli
+		PATHS
+		"${CPPCHECK_ROOT_DIR}"
+		PATH_SUFFIXES
+		cli
+		NO_DEFAULT_PATH)
+endif()
+
+find_program(CPPCHECK_EXECUTABLE NAMES cppcheck)
+
+# Restore original setting for appbundle finding
+set(CMAKE_FIND_APPBUNDLE ${_oldappbundlesetting})
+
+# Find out where our test file is
+get_filename_component(_cppcheckmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+set(_cppcheckdummyfile "${_cppcheckmoddir}/Findcppcheck.cpp")
+
+function(_cppcheck_test_arg _resultvar _arg)
+	if(NOT CPPCHECK_EXECUTABLE)
+		set(${_resultvar} NO)
+		return()
+	endif()
+	execute_process(COMMAND
+		"${CPPCHECK_EXECUTABLE}"
+		"${_arg}"
+		"--quiet"
+		"${_cppcheckdummyfile}"
+		RESULT_VARIABLE
+		_cppcheck_result
+		OUTPUT_QUIET
+		ERROR_QUIET)
+	if("${_cppcheck_result}" EQUAL 0)
+		set(${_resultvar} YES PARENT_SCOPE)
+	else()
+		set(${_resultvar} NO PARENT_SCOPE)
+	endif()
+endfunction()
+
+function(_cppcheck_set_arg_var _argvar _arg)
+	if("${${_argvar}}" STREQUAL "")
+		_cppcheck_test_arg(_cppcheck_arg "${_arg}")
+		if(_cppcheck_arg)
+			set(${_argvar} "${_arg}" PARENT_SCOPE)
+		endif()
+	endif()
+endfunction()
+
+if(CPPCHECK_EXECUTABLE)
+
+	# Check for the two types of command line arguments by just trying them
+	_cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--enable=style")
+	_cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--style")
+	if("${CPPCHECK_STYLE_ARG}" STREQUAL "--enable=style")
+
+		_cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG "--enable=unusedFunctions")
+		_cppcheck_set_arg_var(CPPCHECK_INFORMATION_ARG "--enable=information")
+		_cppcheck_set_arg_var(CPPCHECK_MISSINGINCLUDE_ARG "--enable=missingInclude")
+		_cppcheck_set_arg_var(CPPCHECK_POSIX_ARG "--enable=posix")
+		_cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--enable=possibleError")
+		_cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--enable=all")
+
+		if(MSVC)
+			set(CPPCHECK_TEMPLATE_ARG --template vs)
+			set(CPPCHECK_FAIL_REGULAR_EXPRESSION "[(]error[)]")
+			set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]")
+		elseif(CMAKE_COMPILER_IS_GNUCXX)
+			set(CPPCHECK_TEMPLATE_ARG --template gcc)
+			set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ")
+			set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ")
+		else()
+			set(CPPCHECK_TEMPLATE_ARG --template gcc)
+			set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ")
+			set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ")
+		endif()
+	elseif("${CPPCHECK_STYLE_ARG}" STREQUAL "--style")
+		# Old arguments
+		_cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG "--unused-functions")
+		_cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--all")
+		set(CPPCHECK_FAIL_REGULAR_EXPRESSION "error:")
+		set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]")
+	else()
+		# No idea - some other issue must be getting in the way
+		message(STATUS
+			"WARNING: Can't detect whether CPPCHECK wants new or old-style arguments!")
+	endif()
+
+	set(CPPCHECK_QUIET_ARG "--quiet")
+	set(CPPCHECK_INCLUDEPATH_ARG "-I")
+
+endif()
+
+set(CPPCHECK_ALL
+	"${CPPCHECK_EXECUTABLE} ${CPPCHECK_POSSIBLEERROR_ARG} ${CPPCHECK_UNUSEDFUNC_ARG} ${CPPCHECK_STYLE_ARG} ${CPPCHECK_QUIET_ARG} ${CPPCHECK_INCLUDEPATH_ARG} some/include/path")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(cppcheck
+	DEFAULT_MSG
+	CPPCHECK_ALL
+	CPPCHECK_EXECUTABLE
+	CPPCHECK_POSSIBLEERROR_ARG
+	CPPCHECK_UNUSEDFUNC_ARG
+	CPPCHECK_STYLE_ARG
+	CPPCHECK_INCLUDEPATH_ARG
+	CPPCHECK_QUIET_ARG)
+
+if(CPPCHECK_FOUND OR CPPCHECK_MARK_AS_ADVANCED)
+	mark_as_advanced(CPPCHECK_ROOT_DIR)
+endif()
+
+mark_as_advanced(CPPCHECK_EXECUTABLE)
diff --git a/Findcppcheck.cpp b/Findcppcheck.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..84350db47a689d6745f3f7384d04cd78e3feb56e
--- /dev/null
+++ b/Findcppcheck.cpp
@@ -0,0 +1,16 @@
+/**
+ * \file Findcppcheck.cpp
+ * \brief Dummy C++ source file used by CMake module Findcppcheck.cmake
+ *
+ * \author
+ * Ryan Pavlik, 2009-2010
+ * <rpavlik@iastate.edu>
+ * http://academic.cleardefinition.com/
+ *
+ */
+
+
+
+int main(int argc, char* argv[]) {
+	return 0;
+}
diff --git a/Findcutil.cmake b/Findcutil.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..a7c0340390ff3f4716204b04d42c2a7584b5722c
--- /dev/null
+++ b/Findcutil.cmake
@@ -0,0 +1,48 @@
+# - find NVIDIA CUDA and source for the cutil library, building cutil if needed.
+#
+#  CUTIL_LIBRARIES - Libraries to link against to use CUTIL
+#  CUTIL_INCLUDE_DIRS - Include directories to add before building a CUTIL app.
+#
+# Functions:
+#  install_cutil({RUNTIME_LIBRARY_DESTINATION}) - Install the CUTIL shared lib if created.
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+find_package(CUDA QUIET)
+
+
+file(TO_CMAKE_PATH "${CUDA_SDK_ROOT_DIR}/C/common" CUTIL_ROOT_DIR)
+
+if(NOT EXISTS "${CUTIL_ROOT_DIR}/src/cutil.cpp")
+	set(CUDA_SDK_ROOT_DIR SDKDIR-NOTFOUND CACHE PATH "NVIDIA GPU Computing SDK dir" FORCE)
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(cutil DEFAULT_MSG CUDA_SDK_ROOT_DIR CUDA_FOUND)
+
+if(CUTIL_FOUND)	
+	get_filename_component(_moddir "${CMAKE_CURRENT_LIST_FILE}" PATH)
+	add_subdirectory("${_moddir}/nested_targets/cutil")
+	
+	
+	function(install_cutil dest)
+		install(TARGETS cutil
+			RUNTIME DESTINATION "${dest}"
+			LIBRARY DESTINATION "${dest}")
+	endfunction()
+else()
+	function(install_cutil)
+		message(FATAL_ERROR "Can't install cutil - didn't find it!")
+	endfunction()
+endif()
diff --git a/Findquatlib.cmake b/Findquatlib.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..578d6d2e099215015c653cd5fe1825fbf33af17f
--- /dev/null
+++ b/Findquatlib.cmake
@@ -0,0 +1,99 @@
+# - Find quatlib
+# Find the quatlib headers and libraries.
+#
+#  QUATLIB_INCLUDE_DIRS - where to find quat.h
+#  QUATLIB_LIBRARIES    - List of libraries when using quatlib.
+#  QUATLIB_FOUND        - True if quatlib found.
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(TARGET quat)
+	# Look for the header file.
+	find_path(QUATLIB_INCLUDE_DIR NAMES quat.h
+			PATHS ${quatlib_SOURCE_DIR})
+
+	set(QUATLIB_LIBRARY "quat")
+
+else()
+	set(QUATLIB_ROOT_DIR
+		"${QUATLIB_ROOT_DIR}"
+		CACHE
+		PATH
+		"Root directory to search for quatlib")
+	if(DEFINED VRPN_ROOT_DIR AND NOT QUATLIB_ROOT_DIR)
+		set(QUATLIB_ROOT_DIR "${VRPN_ROOT_DIR}")
+		mark_as_advanced(QUATLIB_ROOT_DIR)
+	endif()
+
+	if("${CMAKE_SIZEOF_VOID_P}" MATCHES "8")
+		set(_libsuffixes lib64 lib)
+
+		# 64-bit dir: only set on win64
+		file(TO_CMAKE_PATH "$ENV{ProgramW6432}" _progfiles)
+	else()
+		set(_libsuffixes lib)
+		if(NOT "$ENV{ProgramFiles(x86)}" STREQUAL "")
+			# 32-bit dir: only set on win64
+			file(TO_CMAKE_PATH "$ENV{ProgramFiles(x86)}" _progfiles)
+		else()
+			# 32-bit dir on win32, useless to us on win64
+			file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _progfiles)
+		endif()
+	endif()
+
+	# Look for the header file.
+	find_path(QUATLIB_INCLUDE_DIR
+		NAMES
+		quat.h
+		HINTS
+		"${QUATLIB_ROOT_DIR}"
+		PATH_SUFFIXES
+		include
+		PATHS
+		"${_progfiles}/VRPN"
+		"${_progfiles}/quatlib")
+
+	# Look for the library.
+	find_library(QUATLIB_LIBRARY
+		NAMES
+		quat.lib
+		libquat.a
+		HINTS
+		"${QUATLIB_ROOT_DIR}"
+		PATH_SUFFIXES
+		${_libsuffixes}
+		PATHS
+		"${_progfiles}/VRPN"
+		"${_progfiles}/quatlib")
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set QUATLIB_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(quatlib
+	DEFAULT_MSG
+	QUATLIB_LIBRARY
+	QUATLIB_INCLUDE_DIR)
+
+if(QUATLIB_FOUND)
+	set(QUATLIB_LIBRARIES ${QUATLIB_LIBRARY})
+	if(NOT WIN32)
+		list(APPEND QUATLIB_LIBRARIES m)
+	endif()
+	set(QUATLIB_INCLUDE_DIRS ${QUATLIB_INCLUDE_DIR})
+
+	mark_as_advanced(QUATLIB_ROOT_DIR)
+else()
+	set(QUATLIB_LIBRARIES)
+	set(QUATLIB_INCLUDE_DIRS)
+endif()
+
+mark_as_advanced(QUATLIB_LIBRARY QUATLIB_INCLUDE_DIR)
diff --git a/GetCPUDetails.cmake b/GetCPUDetails.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9aa5ef1edc6907a91fe4a3d8d99b82131216b85b
--- /dev/null
+++ b/GetCPUDetails.cmake
@@ -0,0 +1,173 @@
+# - Set a number of variables to indicate things about the current CPU and OS
+#
+#  CPU_INTEL
+#  CPU_EXE_64BIT
+#  CPU_EXE_32BIT
+#  CPU_HAS_SSE
+#  CPU_HAS_SSE2
+#  CPU_HAS_SSE3
+#  CPU_HAS_SSSE3
+#  CPU_HAS_SSE4_1
+#  CPU_HAS_SSE4_2
+#
+# Requires these CMake modules:
+#  no additional modules required
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+
+
+if(__get_cpu_details)
+	return()
+endif()
+set(__get_cpu_details YES)
+
+function(get_cpu_details)
+	option(CPUDETAILS_VERBOSE
+		"Should we display results of the CPU info check?"
+		NO)
+	mark_as_advanced(CPUDETAILS_VERBOSE)
+
+	###
+	# CPU_INTEL
+
+	if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "i[3456]86")
+		set(CPU_INTEL YES)
+	elseif(APPLE)
+		# Mac Intel boxes return i386 in 10.5 - so assume this is a PPC
+		set(CPU_INTEL NO)
+	else()
+		# TODO: Assuming yes in case of doubt - probably not a great idea
+		set(CPU_INTEL YES)
+	endif()
+
+	set(CPU_INTEL
+		${CPU_INTEL}
+		CACHE
+		INTERNAL
+		"Intel x86 or x86_64 architecture machine?")
+
+	###
+	# CPU_EXE_64BIT/32BIT
+	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+		set(CPU_EXE_64BIT ON)
+		set(CPU_EXE_32BIT OFF)
+	else()
+		set(CPU_EXE_64BIT OFF)
+		set(CPU_EXE_32BIT ON)
+	endif()
+
+	###
+	# CPU_HAS_SSE/SSE2/SSE3/SSSE3/SSE4.1/SSE4.2
+	if(CPU_INTEL)
+		if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+			# Use /proc/cpuinfo to find this out.
+			file(STRINGS "/proc/cpuinfo" _cpuinfo)
+			if(_cpuinfo MATCHES "(sse)|(xmm)")
+				set(CPU_HAS_SSE YES)
+			else()
+				set(CPU_HAS_SSE NO)
+			endif()
+
+			if(_cpuinfo MATCHES "(sse2)|(xmm2)")
+				set(CPU_HAS_SSE2 YES)
+			else()
+				set(CPU_HAS_SSE2 NO)
+			endif()
+
+			if(_cpuinfo MATCHES "(sse3)|(xmm3)")
+				set(CPU_HAS_SSE3 YES)
+			else()
+				set(CPU_HAS_SSE3 NO)
+			endif()
+
+			if(_cpuinfo MATCHES "ssse3")
+				set(CPU_HAS_SSSE3 YES)
+			else()
+				set(CPU_HAS_SSSE3 NO)
+			endif()
+
+			if(_cpuinfo MATCHES "(sse4_1)|(xmm4_1)")
+				set(CPU_HAS_SSE4_1 YES)
+			else()
+				set(CPU_HAS_SSE4_1 NO)
+			endif()
+
+			if(_cpuinfo MATCHES "(sse4_2)|(xmm4_2)")
+				set(CPU_HAS_SSE4_2 YES)
+			else()
+				set(CPU_HAS_SSE4_2 NO)
+			endif()
+
+		elseif(APPLE)
+			# Mac OS X Intel requires SSE3
+			set(CPU_HAS_SSE YES)
+			set(CPU_HAS_SSE2 YES)
+			set(CPU_HAS_SSE3 YES)
+			set(CPU_HAS_SSSE3 NO)
+			set(CPU_HAS_SSE4_1 NO)
+			set(CPU_HAS_SSE4_2 NO)
+		elseif(WIN32)
+			if(CPU_EXE_64BIT)
+				#TODO: Assume only common-denominator for 64-bit machines,
+				# since I don't know how to check.
+				set(CPU_HAS_SSE YES)
+				set(CPU_HAS_SSE2 YES)
+				set(CPU_HAS_SSE3 NO)
+				set(CPU_HAS_SSSE3 NO)
+				set(CPU_HAS_SSE4_1 NO)
+				set(CPU_HAS_SSE4_2 NO)
+			else()
+				#TODO:  Assume no SSE, since I don't know how to check.
+				set(CPU_HAS_SSE NO)
+				set(CPU_HAS_SSE2 NO)
+				set(CPU_HAS_SSE3 NO)
+				set(CPU_HAS_SSSE3 NO)
+				set(CPU_HAS_SSE4_1 NO)
+				set(CPU_HAS_SSE4_2 NO)
+			endif()
+		endif()
+	endif()
+
+	set(CPU_INTEL
+		${CPU_INTEL}
+		CACHE
+		INTERNAL
+		"Intel x86 or x86_64 architecture machine?")
+
+	foreach(_var
+		CPU_EXE_64BIT
+		CPU_EXE_32BIT
+		CPU_HAS_SSE
+		CPU_HAS_SSE2
+		CPU_HAS_SSE3
+		CPU_HAS_SSSE3
+		CPU_HAS_SSE4_1
+		CPU_HAS_SSE4_2)
+		set(${_var} ${${_var}} CACHE INTERNAL "")
+	endforeach()
+
+	if(CPUDETAILS_VERBOSE)
+		foreach(_var
+			CPU_INTEL
+			CPU_EXE_64BIT
+			CPU_EXE_32BIT
+			CPU_HAS_SSE
+			CPU_HAS_SSE2
+			CPU_HAS_SSE3
+			CPU_HAS_SSSE3
+			CPU_HAS_SSE4_1
+			CPU_HAS_SSE4_2)
+			get_property(_help CACHE ${_var} PROPERTY HELPSTRING)
+			message(STATUS "[get_cpu_details] ${_var} (${_help}): ${${_var}}")
+		endforeach()
+	endif()
+endfunction()
diff --git a/GetCompilerInfoString.cmake b/GetCompilerInfoString.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..7bcd9d9dfb372323f0503c00b5cc0fc17708c58e
--- /dev/null
+++ b/GetCompilerInfoString.cmake
@@ -0,0 +1,181 @@
+# - Utility function to return a human-useful-only string ID'ing the compiler
+#
+#  get_compiler_info_string(<resultvar>)
+#
+# and some helper functions:
+#  get_gcc_version(<resultvar>)
+#  get_vs_short_version_string(<generator> <resultvar>)
+#
+# You might consider using it when setting up CTest options, for example:
+#  include(GetCompilerInfoString)
+#  get_compiler_info_string(COMPILERID)
+#  set(CTEST_BUILD_NAME "${CMAKE_SYSTEM}-${CMAKE_SYSTEM_PROCESSOR}-${COMPILERID}")
+#
+# Requires these CMake modules:
+#  no additional modules required
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+# Some functions based on cmake-2.8.0 modules FindBoost.cmake and CTest.cmake
+#=============================================================================
+# Copyright 2006-2009 Kitware, Inc.
+# Copyright 2006-2008 Andreas Schneider <mail@cynapses.org>
+# Copyright 2007      Wengo
+# Copyright 2007      Mike Jackson
+# Copyright 2008      Andreas Pakulat <apaku@gmx.de>
+# Copyright 2008-2009 Philip Lowman <philip@yhbt.com>
+# Copyright 2010      Iowa State University (Ryan Pavlik <abiryan@ryand.net>)
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# CMake - Cross Platform Makefile Generator
+# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+#
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+#   nor the names of their contributors may be used to endorse or promote
+#   products derived from this software without specific prior written
+#   permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+if(__get_compiler_info_string)
+	return()
+endif()
+set(__get_compiler_info_string YES)
+
+
+function(get_compiler_info_string _var)
+	set(_out)
+
+	if(CTEST_CMAKE_GENERATOR AND NOT CMAKE_GENERATOR)
+		# We're running in CTest - use that generator.
+		set(CMAKE_GENERATOR ${CTEST_CMAKE_GENERATOR})
+	endif()
+
+	if(NOT CMAKE_CXX_COMPILER)
+		# Also for use in CTest scripts
+		include(CMakeDetermineCXXCompiler)
+	endif()
+
+	if(MSVC)
+		# Parse version for Visual Studio
+		get_vs_short_version_string("${CMAKE_GENERATOR}" _verstring)
+		if(${CMAKE_GENERATOR} MATCHES "Win64")
+			set(_verstring "${_verstring}win64")
+		endif()
+
+	elseif(CMAKE_COMPILER_IS_GNUCXX)
+		# Parse version for GCC
+		get_gcc_version(_gccver)
+		set(_verstring "gcc${_gccver}")
+
+	else()
+		# Some other compiler we don't handle yet.
+		message(STATUS
+			"WARNING: Not GCC or MSVC, so we invented a messy compiler info string")
+		string(REGEX REPLACE " " "_" _verstring "${CMAKE_GENERATOR}")
+		set(_verstring "generator:${_verstring}")
+	endif()
+
+	# Return _verstring
+	set(${_var} "${_verstring}" PARENT_SCOPE)
+endfunction()
+
+## Based on a function in FindBoost.cmake from CMake 2.8.0
+#-------------------------------------------------------------------------------
+#
+# Runs compiler with "-dumpversion" and parses major/minor
+# version with a regex.
+#
+function(get_gcc_version _var)
+	exec_program(${CMAKE_CXX_COMPILER}
+		ARGS
+		${CMAKE_CXX_COMPILER_ARG1}
+		-dumpversion
+		OUTPUT_VARIABLE
+		_compilerinfo_COMPILER_VERSION)
+
+	string(REGEX
+		MATCH
+		"([.0-9]+)"
+		"\\1"
+		_compilerinfo_COMPILER_VERSION
+		"${_compilerinfo_COMPILER_VERSION}")
+
+	set(${_var} ${_compilerinfo_COMPILER_VERSION} PARENT_SCOPE)
+endfunction()
+
+## Based on a function in CTest.cmake from CMake 2.8.0
+#-------------------------------------------------------------------------------
+#
+# function to turn generator name into a version string
+# like vs7 vs71 vs8 vs9
+#
+function(get_vs_short_version_string _generator _var)
+	set(_ver_string)
+	if("${_generator}" MATCHES "Visual Studio")
+		string(REGEX
+			REPLACE
+			"Visual Studio ([0-9][0-9]?)($|.*)"
+			"\\1"
+			_vsver
+			"${_generator}")
+		if("${_generator}" MATCHES "Visual Studio 7 .NET 2003")
+			# handle the weird one
+			set(_ver_string "vs71")
+		else()
+			set(_ver_string "vs${_vsver}")
+		endif()
+	elseif(MSVC)
+		if(MSVC71)
+			set(_ver_string "vs71")
+		else()
+			foreach(_ver 6 7 8 9 10)
+				if(MSVC${_ver}0)
+					set(_ver_string "vs${_ver}")
+					break()
+				endif()
+			endforeach()
+		endif()
+	endif()
+
+	if(_ver_string)
+		set(${_var} ${_ver_string} PARENT_SCOPE)
+	endif()
+endfunction()
diff --git a/GetGitRevisionDescription.cmake b/GetGitRevisionDescription.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f6f07ca793f6762ac6c8fd33cf7db02b66730383
--- /dev/null
+++ b/GetGitRevisionDescription.cmake
@@ -0,0 +1,104 @@
+# - Returns a version string from Git
+#
+# These functions force a re-configure on each git commit so that you can
+# trust the values of the variables in your build system.
+#
+#  get_git_head_revision(<refspecvar> <hashvar> [<additonal arguments to git describe> ...])
+#
+# Returns the refspec and sha hash of the current head revision
+#
+#  git_describe(<var> [<additonal arguments to git describe> ...])
+#
+# Returns the results of git describe on the source tree, and adjusting
+# the output so that it tests false if an error occurs.
+#
+#  git_get_exact_tag(<var> [<additonal arguments to git describe> ...])
+#
+# Returns the results of git describe --exact-match on the source tree,
+# and adjusting the output so that it tests false if there was no exact
+# matching tag.
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__get_git_revision_description)
+	return()
+endif()
+set(__get_git_revision_description YES)
+
+# We must run the following at "include" time, not at function call time,
+# to find the path to this module rather than the path to a calling list file
+get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+
+function(get_git_head_revision _refspecvar _hashvar)
+	set(GIT_DIR "${CMAKE_SOURCE_DIR}/.git")
+	if(NOT EXISTS "${GIT_DIR}")
+		# not in git
+		set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
+		set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
+		return()
+	endif()
+	set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
+	if(NOT EXISTS "${GIT_DATA}")
+		file(MAKE_DIRECTORY "${GIT_DATA}")
+	endif()
+	set(HEAD_FILE "${GIT_DATA}/HEAD")
+	configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
+
+	configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" "${GIT_DATA}/grabRef.cmake" @ONLY)
+	include("${GIT_DATA}/grabRef.cmake")
+
+	set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
+	set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
+endfunction()
+
+function(git_describe _var)
+	if(NOT GIT_FOUND)
+		find_package(Git QUIET)
+	endif()
+	get_git_head_revision(refspec hash)
+	if(NOT GIT_FOUND)
+		set(${_var} "GIT-NOTFOUND"  PARENT_SCOPE)
+		return()
+	endif()
+	if(NOT hash)
+		set(${_var} "HEAD-HASH-NOTFOUND"  PARENT_SCOPE)
+		return()
+	endif()
+
+	# TODO sanitize
+	#if((${ARGN}" MATCHES "&&") OR
+	#	(ARGN MATCHES "||") OR
+	#	(ARGN MATCHES "\\;"))
+	#	message("Please report the following error to the project!")
+	#	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
+	#endif()
+
+	#message(STATUS "Arguments to execute_process: ${ARGN}")
+
+	execute_process(COMMAND "${GIT_EXECUTABLE}" describe ${hash} ${ARGN}
+		WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+		RESULT_VARIABLE res
+		OUTPUT_VARIABLE out
+		ERROR_QUIET
+		OUTPUT_STRIP_TRAILING_WHITESPACE)
+	if(NOT res EQUAL 0)
+		set(out "${out}-${res}-NOTFOUND")
+	endif()
+
+	set(${_var} "${out}" PARENT_SCOPE)
+endfunction()
+
+function(git_get_exact_tag _var)
+	git_describe(out --exact-match ${ARGN})
+	set(${_var} "${out}" PARENT_SCOPE)
+endfunction()
diff --git a/GetGitRevisionDescription.cmake.in b/GetGitRevisionDescription.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..1b057b7056295567f714ead7104771f2d47ec402
--- /dev/null
+++ b/GetGitRevisionDescription.cmake.in
@@ -0,0 +1,38 @@
+# 
+# Internal file for GetGitRevisionDescription.cmake
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(HEAD_HASH)
+
+file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
+
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+if(HEAD_CONTENTS MATCHES "ref")
+	# named branch
+	string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
+	if(EXISTS "@GIT_DIR@/${HEAD_REF}")
+	configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+	elseif(EXISTS "@GIT_DIR@/logs/${HEAD_REF}")
+		configure_file("@GIT_DIR@/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+		set(HEAD_HASH "${HEAD_REF}")
+	endif()
+else()
+	# detached HEAD
+	configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
+endif()
+
+if(NOT HEAD_HASH)
+file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
+string(STRIP "${HEAD_HASH}" HEAD_HASH)
+endif()
diff --git a/LICENSE_1_0.txt b/LICENSE_1_0.txt
new file mode 100644
index 0000000000000000000000000000000000000000..36b7cd93cdfbac762f5be4c6ce276df2ea6305c2
--- /dev/null
+++ b/LICENSE_1_0.txt
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/Licensing.cmake b/Licensing.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..dae8e8b5a781ab7d06d0dcbee718470bb211ad9c
--- /dev/null
+++ b/Licensing.cmake
@@ -0,0 +1,133 @@
+# - Building a licensing description file
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+define_property(GLOBAL
+	PROPERTY
+	PROPRIETARY_LICENSES
+	BRIEF_DOCS
+	"Text for proprietary licenses"
+	FULL_DOCS
+	"Text for proprietary licenses")
+define_property(GLOBAL
+	PROPERTY
+	SHAREALIKE_LICENSES
+	BRIEF_DOCS
+	"Text for share-alike licenses"
+	FULL_DOCS
+	"Text for share-alike licenses (e.g. GPL)")
+define_property(GLOBAL
+	PROPERTY
+	PERMISSIVE_LICENSES
+	BRIEF_DOCS
+	"Text for permissive licenses"
+	FULL_DOCS
+	"Text for permissive licenses (e.g. BSD, MIT, X11)")
+define_property(GLOBAL
+	PROPERTY
+	PACKAGES_LICENSED
+	BRIEF_DOCS
+	"List of all packages whose licenses are registered here"
+	FULL_DOCS
+	"List of all packages whose licenses are registered here")
+define_property(GLOBAL
+	PROPERTY
+	REDISTRIBUTION_WARNINGS
+	BRIEF_DOCS
+	"Text for important redistribution warnings"
+	FULL_DOCS
+	"Text for important redistribution warnings, such as 'This is not redistributable!'")
+
+
+function(add_license LICENSE_TYPE_PROPERTY package license)
+	get_property(def GLOBAL PROPERTY LICENSE_PACKAGE_${package} DEFINED)
+	if(NOT def)
+		define_property(GLOBAL
+			PROPERTY
+			LICENSE_PACKAGE_${package}
+			BRIEF_DOCS
+			"Flag to indicate the addition of the license for ${package}"
+			FULL_DOCS
+			"Flag to indicate the addition of the license for ${package}")
+		get_property(existing GLOBAL PROPERTY ${LICENSE_TYPE_PROPERTY})
+		set_property(GLOBAL
+			PROPERTY
+			${LICENSE_TYPE_PROPERTY}
+			"${existing}${license}\n\n")
+
+		if(ARGN)
+			define_property(GLOBAL
+				PROPERTY
+				LICENSE_EXTRAS_PACKAGE_${package}
+				BRIEF_DOCS
+				"Extras (like URL) for the license for ${package}"
+				FULL_DOCS
+				"Extras (like URL) for the license for ${package}")
+			set_property(GLOBAL
+				PROPERTY
+				LICENSE_EXTRAS_PACKAGE_${package}
+				"${ARGN}")
+		endif()
+
+		get_property(allpackages GLOBAL PROPERTY PACKAGES_LICENSED)
+		list(APPEND allpackages "${package}")
+		set_property(GLOBAL PROPERTY PACKAGES_LICENSED "${allpackages}")
+	endif()
+endfunction()
+
+function(add_proprietary_license package license)
+	add_license(PROPRIETARY_LICENSES "${package}" "${license}" ${ARGN})
+endfunction()
+
+function(add_sharealike_license package license)
+	add_license(SHAREALIKE_LICENSES "${package}" "${license}" ${ARGN})
+endfunction()
+
+function(add_permissive_license package license)
+	add_license(PERMISSIVE_LICENSES "${package}" "${license}" ${ARGN})
+endfunction()
+
+function(add_redistribution_warning warning)
+	get_property(existing GLOBAL PROPERTY REDISTRIBUTION_WARNINGS)
+	set_property(GLOBAL
+		PROPERTY
+		REDISTRIBUTION_WARNINGS
+		"${warning}  ${existing}")
+endfunction()
+
+function(configure_license_file input output)
+	get_property(PACKAGES_LICENSED GLOBAL PROPERTY PACKAGES_LICENSED)
+	if(PACKAGES_LICENSED)
+		list(SORT PACKAGES_LICENSED)
+		set(PACKAGES_LICENSED_BULLETED)
+		foreach(package ${PACKAGES_LICENSED})
+			set(EXTRAS)
+			get_property(package_extras
+				GLOBAL
+				PROPERTY
+				"LICENSE_EXTRAS_PACKAGE_${package}")
+			if(package_extras)
+				set(EXTRAS " ${package_extras}")
+			endif()
+			set(PACKAGES_LICENSED_BULLETED
+				"${PACKAGES_LICENSED_BULLETED} * ${package}${EXTRAS}\n")
+		endforeach()
+	endif()
+	get_property(REDISTRIBUTION_WARNINGS
+		GLOBAL
+		PROPERTY
+		REDISTRIBUTION_WARNINGS)
+	get_property(PROPRIETARY_LICENSES GLOBAL PROPERTY PROPRIETARY_LICENSES)
+	get_property(SHAREALIKE_LICENSES GLOBAL PROPERTY SHAREALIKE_LICENSES)
+	get_property(PERMISSIVE_LICENSES GLOBAL PROPERTY PERMISSIVE_LICENSES)
+	configure_file("${input}" "${output}" ${ARGN})
+endfunction()
+
diff --git a/ListCombinations.cmake b/ListCombinations.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4321f624a8d4ad8c2b4d459c3e2061ce99333172
--- /dev/null
+++ b/ListCombinations.cmake
@@ -0,0 +1,53 @@
+# - Combine lists of prefixes and suffixes in all combinations
+#
+#  list_combinations(var PREFIXES listitems... SUFFIXES listitems...) -
+#   where var is the name of your desired output variable and PREFIXES
+#   and SUFFIXES are special arguments that indicate the start of your
+#   list of prefixes or suffixes respectively.
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__list_combinations)
+	return()
+endif()
+set(__list_combinations YES)
+
+function(list_combinations var)
+	# Parse arguments
+	set(_prefixes)
+	set(_suffixes)
+	set(_nowhere)
+	set(_curdest _nowhere)
+	foreach(_element ${ARGN})
+		if("${_element}" STREQUAL "PREFIXES")
+			set(_curdest _prefixes)
+		elseif("${_element}" STREQUAL "SUFFIXES")
+			set(_curdest _suffixes)
+		else()
+			list(APPEND ${_curdest} "${_element}")
+		endif()
+	endforeach()
+	if(_nowhere)
+		message(STATUS "_prefixes ${_prefixes}")
+		message(STATUS "_prefixes ${_suffixes}")
+		message(STATUS "_prefixes ${_nowhere}")
+		message(FATAL_ERROR
+			"Syntax error in use of ${CMAKE_CURRENT_LIST_FILE}")
+	endif()
+
+	foreach(_prefix ${_prefixes})
+		foreach(_suffix ${_suffixes})
+			list(APPEND _out "${_prefix}${_suffix}")
+		endforeach()
+	endforeach()
+
+	set(${var} "${_out}" PARENT_SCOPE)
+endfunction()
diff --git a/ListFilter.cmake b/ListFilter.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..037859520ba7d503aa2fce3dea7ccb09fb973047
--- /dev/null
+++ b/ListFilter.cmake
@@ -0,0 +1,50 @@
+# - List filtering functions
+#
+#  list_filter(var regex listitems...) - where var is the name of
+#   your desired output variable, regex is the regex whose matching items
+#   WILL be put in the output variable, and everything else is considered
+#   a list item to be filtered.
+#
+#  list_filter_out(var regex listitems...) - where var is the name of
+#   your desired output variable, regex is the regex whose matching items
+#   will NOT be put in the output variable, and everything else is considered
+#   a list item to be filtered.
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__list_filter_out)
+	return()
+endif()
+set(__list_filter_out YES)
+
+function(list_filter_out var regex)
+	set(_out)
+	foreach(_item ${ARGN})
+		set(_re)
+		string(REGEX MATCH "${regex}" _re "${_item}")
+		if(NOT _re)
+			list(APPEND _out "${_item}")
+		endif()
+	endforeach()
+	set(${var} "${_out}" PARENT_SCOPE)
+endfunction()
+
+function(list_filter var regex)
+	set(_out)
+	foreach(_item ${ARGN})
+		set(_re)
+		string(REGEX MATCH "${regex}" _re "${_item}")
+		if(_re)
+			list(APPEND _out "${_item}")
+		endif()
+	endforeach()
+	set(${var} "${_out}" PARENT_SCOPE)
+endfunction()
diff --git a/MSVCMultipleProcessCompile.cmake b/MSVCMultipleProcessCompile.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..aad4eabded62acc0e0ecc97c9c154103176f800d
--- /dev/null
+++ b/MSVCMultipleProcessCompile.cmake
@@ -0,0 +1,31 @@
+# - Compile with multiple processes on MSVC
+#
+#  include(MSVCMultipleProcessCompile)
+#
+# Requires these CMake modules:
+#  ListCombinations.cmake
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(MSVC AND NOT "${MSVC_VERSION}" LESS 1400)
+	# Only available in VS 2005 and newer
+	string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" _conftypesUC)
+	include(ListCombinations)
+	list_combinations(_varnames
+		PREFIXES
+		CMAKE_C_FLAGS_
+		CMAKE_CXX_FLAGS_
+		SUFFIXES
+		${_conftypesUC})
+	foreach(_var ${_varnames})
+		set(${_var} "${${_var}} /MP")
+	endforeach()
+endif()
diff --git a/MSVCStaticRuntime.cmake b/MSVCStaticRuntime.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e4ceea6f92bf3a3741d8f7c25533aa2720465db8
--- /dev/null
+++ b/MSVCStaticRuntime.cmake
@@ -0,0 +1,33 @@
+# - Modify compile flags to use the static runtimes of MSVC
+#
+#  include(MSVCStaticRuntime)
+#
+# Requires these CMake modules:
+#  ListCombinations.cmake
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(MSVC)
+	string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" _conftypesUC)
+	include(ListCombinations)
+	list_combinations(_varnames
+		PREFIXES
+		CMAKE_C_FLAGS_
+		CMAKE_CXX_FLAGS_
+		SUFFIXES
+		${_conftypesUC})
+	foreach(_var ${_varnames})
+		string(REPLACE "/MDd" "/MTd" ${_var} "${${_var}}")
+		string(REPLACE "/MD" "/MT" ${_var} "${${_var}}")
+	endforeach()
+endif()
+
+set(Boost_USE_STATIC_LIBS ON)
diff --git a/MSVCVerboseLinking.cmake b/MSVCVerboseLinking.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..84d4a227818313b8936649866407e2da206bef3b
--- /dev/null
+++ b/MSVCVerboseLinking.cmake
@@ -0,0 +1,48 @@
+# - Add appropriate linker flags to show link details on Visual Studio
+#
+#  include(MSVCVerboseLinking) - to add the flags automaticlly if applicable
+#
+# Be sure to include this module _BEFORE_ adding your targets, or the targets
+# won't pick up the updated flags.
+#
+# Requires these CMake modules:
+#  - none
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(MSVC)
+	if(NOT DEFINED MSVC_LINK_REALLY_VERBOSE)
+		if(IN_DASHBOARD_SCRIPT)
+			set(MSVC_LINK_REALLY_VERBOSE TRUE)
+		else()
+			set(MSVC_LINK_REALLY_VERBOSE FALSE)
+		endif()
+	endif()
+	set(MSVC_LINK_REALLY_VERBOSE
+		"${MSVC_LINK_REALLY_VERBOSE}"
+		CACHE
+		BOOL
+		"Provide maximum linker messages?")
+	mark_as_advanced(MSVC_LINK_REALLY_VERBOSE)
+
+	if(MSVC_LINK_REALLY_VERBOSE)
+		set(_verbose_flag "/VERBOSE")
+	else()
+		set(_verbose_flag "/VERBOSE:LIB")
+	endif()
+
+	set(CMAKE_EXE_LINKER_FLAGS
+		"${CMAKE_EXE_LINKER_FLAGS} ${_verbose_flag}")
+	set(CMAKE_MODULE_LINKER_FLAGS
+		"${CMAKE_MODULE_LINKER_FLAGS} ${_verbose_flag}")
+	set(CMAKE_SHARED_LINKER_FLAGS
+		"${CMAKE_SHARED_LINKER_FLAGS} ${_verbose_flag}")
+endif()
diff --git a/OptionRequires.cmake b/OptionRequires.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..5505664d135a52eb1ae48ea2da4b82a60d573168
--- /dev/null
+++ b/OptionRequires.cmake
@@ -0,0 +1,52 @@
+# - Add an option that depends on one or more variables being true.
+#
+#  option_requires(<option_name> <description> <variable_name> [<variable_name>...])
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+function(option_requires name desc)
+	set(args ${ARGN})
+
+	set(OFF_BY_DEFAULT false)
+	list(FIND args "OFF_BY_DEFAULT" _off_found)
+	if(NOT _off_found EQUAL -1)
+		list(REMOVE_AT args ${_off_found})
+		set(OFF_BY_DEFAULT true)
+	endif()
+	
+	set(found)
+	set(missing)
+	foreach(var ${args})
+		if(${var})
+			list(APPEND found ${var})
+		else()
+			list(APPEND missing ${var})
+		endif()
+	endforeach()
+	
+	if(NOT missing)
+		set(OK TRUE)
+	else()
+		set(OK FALSE)
+	endif()
+	
+	set(default ${OK})
+	if(OFF_BY_DEFAULT)
+		set(default OFF)
+	endif()
+	
+	option(${name} "${desc}" ${default})
+	
+	if(${name} AND (NOT OK))
+		message(FATAL_ERROR "${name} enabled but these dependencies were not valid: ${missing}")
+	endif()
+
+endfunction()
diff --git a/ResetConfigurations.cmake b/ResetConfigurations.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..8c13fdf669a8a77e554a717ff5e5e001d62e4ab8
--- /dev/null
+++ b/ResetConfigurations.cmake
@@ -0,0 +1,31 @@
+# - Re-set the available configurations to just RelWithDebInfo, Release, and Debug
+#
+# Requires these CMake modules:
+#  no additional modules required
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+
+
+if(__reset_configurations)
+	return()
+endif()
+set(__reset_configurations YES)
+
+if(CMAKE_CONFIGURATION_TYPES)
+	set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug")
+	set(CMAKE_CONFIGURATION_TYPES
+		"${CMAKE_CONFIGURATION_TYPES}"
+		CACHE
+		STRING
+		"Reset the configurations to what we need"
+		FORCE)
+endif()
diff --git a/SetDefaultBuildType.cmake b/SetDefaultBuildType.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..cd29e32ac23866e6fa40439bd8df3ae001e6c4d9
--- /dev/null
+++ b/SetDefaultBuildType.cmake
@@ -0,0 +1,31 @@
+# - Set a developer-chosen default build type
+#
+# Requires these CMake modules:
+#  no additional modules required
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+#
+
+
+if(__set_default_build_type)
+	return()
+endif()
+set(__set_default_build_type YES)
+
+function(set_default_build_type _type)
+	#if(DEFINED CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE)
+	if("${CMAKE_GENERATOR}" MATCHES "Makefiles" AND NOT CMAKE_BUILD_TYPE)
+		if(NOT __DEFAULT_BUILD_TYPE_SET)
+			set(CMAKE_BUILD_TYPE "${_type}" CACHE STRING "" FORCE)
+			set(__DEFAULT_BUILD_TYPE_SET YES CACHE INTERNAL "")
+		endif()
+	endif()
+endfunction()
diff --git a/UseBackportedModules.cmake b/UseBackportedModules.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..7ad3baac330a151ea08f1eff172e52f39c72752c
--- /dev/null
+++ b/UseBackportedModules.cmake
@@ -0,0 +1,114 @@
+# - Do a version-dependent check and auto-include backported modules dirs
+#
+# Name your module directories cmake-*-modules where * is the full
+# (maj.min.patch) version number that they came from.  You can use
+# subdirectories within those directories, if you like - all directories
+# inside of a cmake-*-modules dir for a newer version of CMake that what
+# we're running, that contain one or more .cmake files, will be appended
+# to the CMAKE_MODULE_PATH.
+#
+# When backporting modules, be sure to test them and follow copyright
+# instructions (usually updating copyright notices)
+#
+# Requires these CMake modules:
+#  CleanDirectoryList
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(NOT CMAKE_VERSION)	# defined in >=2.6.3
+	set(_cmver
+		"${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
+else()
+	set(_cmver "${CMAKE_VERSION}")
+endif()
+
+include(CleanDirectoryList)
+
+# No debugging output please
+set(USE_BACKPORTED_MODULES_VERBOSE NO)
+
+get_filename_component(_moddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+file(GLOB _globbed "${_moddir}/cmake-*-modules")
+
+if(USE_BACKPORTED_MODULES_VERBOSE)
+	message(STATUS
+		"UseBackportedModules: Detected use of CMake version ${_cmver}")
+	message(STATUS "Checking these base directories: ${_globbed}")
+endif()
+
+foreach(_dir ${_globbed})
+	string(REGEX
+		MATCH
+		"cmake-[0-9].[0-9].[0-9]-modules"
+		_dirname
+		"${_dir}")
+	string(REGEX
+		REPLACE
+		"cmake-([0-9].[0-9].[0-9])-modules"
+		"\\1"
+		_ver
+		"${_dirname}")
+	string(REGEX
+		REPLACE
+		"cmake-([0-9]).([0-9]).([0-9])-modules"
+		"\\1_\\2_\\3"
+		_ver_clean
+		"${_dirname}")
+
+	if(USE_BACKPORTED_MODULES_VERBOSE)
+		message(STATUS "${_dir}: ${_ver} ${_ver_clean}")
+	endif()
+
+	if("${_cmver}" VERSION_LESS "${_ver}")
+		list(APPEND _upgradever "${_ver_clean}")
+		file(GLOB_RECURSE _modules "${_dir}/*.cmake")
+
+		foreach(_mod ${_modules})
+			get_filename_component(_path "${_mod}" PATH)
+			list(APPEND _paths_${_ver_clean} "${_path}")
+		endforeach()
+
+	endif()
+endforeach()
+
+
+# Autoinclude files from oldest version to newest version
+if(_upgradever)
+	set(_save_cmake_module_path ${CMAKE_MODULE_PATH})
+	list(REMOVE_DUPLICATES _upgradever)
+	list(SORT _upgradever)
+	foreach(_ver_clean ${_upgradever})
+		clean_directory_list(_paths_${_ver_clean})
+		foreach(_dir ${_paths_${_ver_clean}})
+			set(CMAKE_MODULE_PATH ${_dir} ${_save_cmake_module_path})
+			include("${_dir}/autoinclude.cmake" OPTIONAL RESULT_VARIABLE _result)
+			if(USE_BACKPORTED_MODULES_VERBOSE)
+				message(STATUS "${_dir} - Autoincluded: ${_result}")
+			endif()
+		endforeach()
+	endforeach()
+	set(CMAKE_MODULE_PATH ${_save_cmake_module_path})
+endif()
+
+# Add the module path from newest version to oldest version
+set(_added_module_path)
+if(_upgradever)
+	list(REVERSE _upgradever)
+	foreach(_ver_clean ${_upgradever})
+		list(APPEND _added_module_path ${_paths_${_ver_clean}})
+	endforeach()
+endif()
+
+list(APPEND CMAKE_MODULE_PATH ${_added_module_path})
+
+if(USE_BACKPORTED_MODULES_VERBOSE)
+	message(STATUS "New module path: ${CMAKE_MODULE_PATH}")
+endif()
diff --git a/WarningDev.cmake b/WarningDev.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..851b5f5e88c9eec3be5c5b65b4902f1b78e7e3d2
--- /dev/null
+++ b/WarningDev.cmake
@@ -0,0 +1,24 @@
+# - Print a developer warning, using author_warning if we have cmake 2.8
+#
+#  warning_dev("your desired message")
+#
+# Original Author:
+# 2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+function(warning_dev _yourmsg)
+	if("1.${CMAKE_VERSION}" VERSION_LESS "1.2.8.0")
+		# CMake version <2.8.0
+		message(STATUS
+			"The following is a developer warning - end users may ignore it")
+		message(STATUS "Dev Warning: ${_yourmsg}")
+	else()
+		message(AUTHOR_WARNING "${_yourmsg}")
+	endif()
+endfunction()
diff --git a/cmake-2.8.0-modules/features/SelectLibraryConfigurations.cmake b/cmake-2.8.0-modules/features/SelectLibraryConfigurations.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..ee1220ccda70a335fe0f73780382df060cbb1c87
--- /dev/null
+++ b/cmake-2.8.0-modules/features/SelectLibraryConfigurations.cmake
@@ -0,0 +1,108 @@
+# select_library_configurations( basename )
+#
+# This macro takes a library base name as an argument, and will choose good
+# values for basename_LIBRARY, basename_LIBRARIES, basename_LIBRARY_DEBUG, and
+# basename_LIBRARY_RELEASE depending on what has been found and set.  If only
+# basename_LIBRARY_RELEASE is defined, basename_LIBRARY, basename_LIBRARY_DEBUG,
+# and basename_LIBRARY_RELEASE will be set to the release value.  If only
+# basename_LIBRARY_DEBUG is defined, then basename_LIBRARY,
+# basename_LIBRARY_DEBUG and basename_LIBRARY_RELEASE will take the debug value.  
+#
+# If the generator supports configuration types, then basename_LIBRARY and
+# basename_LIBRARIES will be set with debug and optimized flags specifying the
+# library to be used for the given configuration.  If no build type has been set
+# or the generator in use does not support configuration types, then
+# basename_LIBRARY and basename_LIBRARIES will take only the release values.
+
+#=============================================================================
+# Copyright 2009 Kitware, Inc.
+# Copyright 2009 Will Dicharry <wdicharry@stellarscience.com>
+# Copyright 2005-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see below.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# 
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# 
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+#   nor the names of their contributors may be used to endorse or promote
+#   products derived from this software without specific prior written
+#   permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+# This macro was adapted from the FindQt4 CMake module and is maintained by Will
+# Dicharry <wdicharry@stellarscience.com>.
+
+# Utility macro to check if one variable exists while another doesn't, and set
+# one that doesn't exist to the one that exists.
+macro( _set_library_name basename GOOD BAD )
+    if( ${basename}_LIBRARY_${GOOD} AND NOT ${basename}_LIBRARY_${BAD} )
+        set( ${basename}_LIBRARY_${BAD} ${${basename}_LIBRARY_${GOOD}} )
+        set( ${basename}_LIBRARY ${${basename}_LIBRARY_${GOOD}} )
+        set( ${basename}_LIBRARIES ${${basename}_LIBRARY_${GOOD}} )
+    endif( ${basename}_LIBRARY_${GOOD} AND NOT ${basename}_LIBRARY_${BAD} )
+endmacro( _set_library_name )
+
+macro( select_library_configurations basename )
+    # if only the release version was found, set the debug to be the release
+    # version.
+    _set_library_name( ${basename} RELEASE DEBUG )
+    # if only the debug version was found, set the release value to be the
+    # debug value.
+    _set_library_name( ${basename} DEBUG RELEASE )
+    if (${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE )
+        # if the generator supports configuration types or CMAKE_BUILD_TYPE
+        # is set, then set optimized and debug options.
+        if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+            set( ${basename}_LIBRARY 
+                optimized ${${basename}_LIBRARY_RELEASE}
+                debug ${${basename}_LIBRARY_DEBUG} )
+            set( ${basename}_LIBRARIES 
+                optimized ${${basename}_LIBRARY_RELEASE}
+                debug ${${basename}_LIBRARY_DEBUG} )
+        else( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+            # If there are no configuration types or build type, just use
+            # the release version
+            set( ${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} )
+            set( ${basename}_LIBRARIES ${${basename}_LIBRARY_RELEASE} )
+        endif( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
+    endif( ${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE )
+
+    set( ${basename}_LIBRARY ${${basename}_LIBRARY} CACHE FILEPATH 
+        "The ${basename} library" )
+
+    if( ${basename}_LIBRARY )
+        set( ${basename}_FOUND TRUE )
+    endif( ${basename}_LIBRARY )
+
+    mark_as_advanced( ${basename}_LIBRARY 
+        ${basename}_LIBRARY_RELEASE
+        ${basename}_LIBRARY_DEBUG
+    )
+endmacro( select_library_configurations )
+
diff --git a/cmake-2.8.1-modules/patchctestbug10149/CTest.cmake b/cmake-2.8.1-modules/patchctestbug10149/CTest.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0c5aaf4e0c4103a9b0b2402682cbe7ae35b3dbbd
--- /dev/null
+++ b/cmake-2.8.1-modules/patchctestbug10149/CTest.cmake
@@ -0,0 +1,363 @@
+# - Configure a project for testing with CTest/CDash
+# Include this module in the top CMakeLists.txt file of a project to
+# enable testing with CTest and dashboard submissions to CDash:
+#   project(MyProject)
+#   ...
+#   include(CTest)
+# The module automatically creates a BUILD_TESTING option that selects
+# whether to enable testing support (ON by default).  After including
+# the module, use code like
+#   if(BUILD_TESTING)
+#     # ... CMake code to create tests ...
+#   endif()
+# to creating tests when testing is enabled.
+#
+# To enable submissions to a CDash server, create a CTestConfig.cmake
+# file at the top of the project with content such as
+#   set(CTEST_PROJECT_NAME "MyProject")
+#   set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
+#   set(CTEST_DROP_METHOD "http")
+#   set(CTEST_DROP_SITE "my.cdash.org")
+#   set(CTEST_DROP_LOCATION "/submit.php?project=MyProject")
+#   set(CTEST_DROP_SITE_CDASH TRUE)
+# (the CDash server can provide the file to a project administrator
+# who configures 'MyProject').
+# Settings in the config file are shared by both this CTest module and
+# the CTest command-line tool's dashboard script mode (ctest -S).
+#
+# While building a project for submission to CDash, CTest scans the
+# build output for errors and warnings and reports them with
+# surrounding context from the build log.  This generic approach works
+# for all build tools, but does not give details about the command
+# invocation that produced a given problem.  One may get more detailed
+# reports by adding
+#   set(CTEST_USE_LAUNCHERS 1)
+# to the CTestConfig.cmake file.  When this option is enabled, the
+# CTest module tells CMake's Makefile generators to invoke every
+# command in the generated build system through a CTest launcher
+# program.  (Currently the CTEST_USE_LAUNCHERS option is ignored on
+# non-Makefile generators.)  During a manual build each launcher
+# transparently runs the command it wraps.  During a CTest-driven
+# build for submission to CDash each launcher reports detailed
+# information when its command fails or warns.
+# (Setting CTEST_USE_LAUNCHERS in CTestConfig.cmake is convenient, but
+# also adds the launcher overhead even for manual builds.  One may
+# instead set it in a CTest dashboard script and add it to the CMake
+# cache for the build tree.)
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see below.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# 
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# 
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+#   nor the names of their contributors may be used to endorse or promote
+#   products derived from this software without specific prior written
+#   permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+option(BUILD_TESTING "Build the testing tree." ON)
+
+# function to turn generator name into a version string
+# like vs7 vs71 vs8 vs9
+function(get_vs_version_string generator var)
+	string(REGEX
+		REPLACE
+		"Visual Studio ([0-9][0-9]?)($|.*)"
+		"\\1"
+		NUMBER
+		"${generator}")
+	if("${generator}" MATCHES "Visual Studio 7 .NET 2003")
+		set(ver_string "vs71")
+	else()
+		set(ver_string "vs${NUMBER}")
+	endif()
+	set(${var} ${ver_string} PARENT_SCOPE)
+endfunction()
+
+if(BUILD_TESTING)
+	# Setup some auxilary macros
+	macro(set_if_not_set var val)
+		if(NOT DEFINED "${var}")
+			set("${var}" "${val}")
+		endif()
+	endmacro()
+
+	macro(set_if_set var val)
+		if(NOT "${val}" MATCHES "^$")
+			set("${var}" "${val}")
+		endif()
+	endmacro()
+
+	macro(set_if_set_and_not_set var val)
+		if(NOT "${val}" MATCHES "^$")
+			set_if_not_set("${var}" "${val}")
+		endif()
+	endmacro()
+
+	# Make sure testing is enabled
+	enable_testing()
+
+	if(EXISTS "${PROJECT_SOURCE_DIR}/CTestConfig.cmake")
+		include("${PROJECT_SOURCE_DIR}/CTestConfig.cmake")
+		set_if_set_and_not_set(NIGHTLY_START_TIME
+			"${CTEST_NIGHTLY_START_TIME}")
+		set_if_set_and_not_set(DROP_METHOD "${CTEST_DROP_METHOD}")
+		set_if_set_and_not_set(DROP_SITE "${CTEST_DROP_SITE}")
+		set_if_set_and_not_set(DROP_SITE_USER "${CTEST_DROP_SITE_USER}")
+		set_if_set_and_not_set(DROP_SITE_PASSWORD
+			"${CTEST_DROP_SITE_PASWORD}")
+		set_if_set_and_not_set(DROP_SITE_MODE "${CTEST_DROP_SITE_MODE}")
+		set_if_set_and_not_set(DROP_LOCATION "${CTEST_DROP_LOCATION}")
+		set_if_set_and_not_set(TRIGGER_SITE "${CTEST_TRIGGER_SITE}")
+		set_if_set_and_not_set(UPDATE_TYPE "${CTEST_UPDATE_TYPE}")
+	endif()
+
+	# the project can have a DartConfig.cmake file
+	if(EXISTS "${PROJECT_SOURCE_DIR}/DartConfig.cmake")
+		include("${PROJECT_SOURCE_DIR}/DartConfig.cmake")
+	else()
+		# Dashboard is opened for submissions for a 24 hour period starting at
+		# the specified NIGHTLY_START_TIME. Time is specified in 24 hour format.
+		set_if_not_set(NIGHTLY_START_TIME "00:00:00 EDT")
+		set_if_not_set(DROP_METHOD "http")
+		set_if_not_set(COMPRESS_SUBMISSION ON)
+	endif()
+	set_if_not_set(NIGHTLY_START_TIME "00:00:00 EDT")
+
+	if(NOT UPDATE_TYPE)
+		if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CVS")
+			set(UPDATE_TYPE cvs)
+		elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn")
+			set(UPDATE_TYPE svn)
+		elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.bzr")
+			set(UPDATE_TYPE bzr)
+		elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.hg")
+			set(UPDATE_TYPE hg)
+		elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
+			set(UPDATE_TYPE git)
+		endif()
+	endif()
+
+	if(NOT UPDATE_TYPE)
+		if(NOT __CTEST_UPDATE_TYPE_COMPLAINED)
+			set(__CTEST_UPDATE_TYPE_COMPLAINED
+				1
+				CACHE
+				INTERNAL
+				"Already complained about update type.")
+			message(STATUS
+				"CTest cannot determine repository type. Please set UPDATE_TYPE to cvs, svn, bzr, hg, or git. CTest update will not work.")
+		endif()
+	endif()
+
+	string(TOLOWER "${UPDATE_TYPE}" _update_type)
+	if("${_update_type}" STREQUAL "cvs")
+		find_program(CVSCOMMAND cvs)
+		set(CVS_UPDATE_OPTIONS
+			"-d -A -P"
+			CACHE
+			STRING
+			"Options passed to the cvs update command.")
+		set(UPDATE_COMMAND "${CVSCOMMAND}")
+		set(UPDATE_OPTIONS "${CVS_UPDATE_OPTIONS}")
+
+	elseif("${_update_type}" STREQUAL "svn")
+		find_program(SVNCOMMAND svn)
+		set(UPDATE_COMMAND "${SVNCOMMAND}")
+		set(UPDATE_OPTIONS "${SVN_UPDATE_OPTIONS}")
+
+	elseif("${_update_type}" STREQUAL "bzr")
+		find_program(BZRCOMMAND bzr)
+		set(UPDATE_COMMAND "${BZRCOMMAND}")
+		set(UPDATE_OPTIONS "${BZR_UPDATE_OPTIONS}")
+
+	elseif("${_update_type}" STREQUAL "hg")
+		find_program(HGCOMMAND hg)
+		set(UPDATE_COMMAND "${HGCOMMAND}")
+		set(UPDATE_OPTIONS "${HG_UPDATE_OPTIONS}")
+
+	elseif("${_update_type}" STREQUAL "git")
+		find_program(GITCOMMAND git)
+		set(UPDATE_COMMAND "${GITCOMMAND}")
+		set(UPDATE_OPTIONS "${GIT_UPDATE_OPTIONS}")
+	endif()
+
+	set(DART_TESTING_TIMEOUT
+		1500
+		CACHE
+		STRING
+		"Maximum time allowed before CTest will kill the test.")
+
+	find_program(MEMORYCHECK_COMMAND
+		NAMES
+		purify
+		valgrind
+		boundscheck
+		PATHS
+		"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational Software\\Purify\\Setup;InstallFolder]"
+		DOC
+		"Path to the memory checking command, used for memory error detection.")
+	find_program(SLURM_SBATCH_COMMAND
+		sbatch
+		DOC
+		"Path to the SLURM sbatch executable")
+	find_program(SLURM_SRUN_COMMAND
+		srun
+		DOC
+		"Path to the SLURM srun executable")
+	set(MEMORYCHECK_SUPPRESSIONS_FILE
+		""
+		CACHE
+		FILEPATH
+		"File that contains suppressions for the memory checker")
+	find_program(SCPCOMMAND
+		scp
+		DOC
+		"Path to scp command, used by CTest for submitting results to a Dart server")
+	find_program(COVERAGE_COMMAND
+		gcov
+		DOC
+		"Path to the coverage program that CTest uses for performing coverage inspection")
+
+	# set the site name
+	site_name(SITE)
+	# set the build name
+	if(NOT BUILDNAME)
+		set(DART_COMPILER "${CMAKE_CXX_COMPILER}")
+
+		if(NOT DART_COMPILER)
+			set(DART_COMPILER "${CMAKE_C_COMPILER}")
+		endif()
+
+		if(NOT DART_COMPILER)
+			set(DART_COMPILER "unknown")
+		endif()
+
+		if(WIN32)
+			set(DART_NAME_COMPONENT "NAME_WE")
+		else()
+			set(DART_NAME_COMPONENT "NAME")
+		endif()
+
+		if(NOT BUILD_NAME_SYSTEM_NAME)
+			set(BUILD_NAME_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}")
+		endif()
+
+		if(WIN32)
+			set(BUILD_NAME_SYSTEM_NAME "Win32")
+		endif()
+
+		if(UNIX OR BORLAND)
+			get_filename_component(DART_CXX_NAME
+				"${CMAKE_CXX_COMPILER}"
+				${DART_NAME_COMPONENT})
+		else()
+			get_filename_component(DART_CXX_NAME
+				"${CMAKE_BUILD_TOOL}"
+				${DART_NAME_COMPONENT})
+		endif()
+
+		if(DART_CXX_NAME MATCHES "msdev")
+			set(DART_CXX_NAME "vs60")
+		endif()
+
+		if(DART_CXX_NAME MATCHES "devenv")
+			get_vs_version_string("${CMAKE_GENERATOR}" DART_CXX_NAME)
+		endif()
+
+		set(BUILDNAME "${BUILD_NAME_SYSTEM_NAME}-${DART_CXX_NAME}")
+	endif()
+
+	# the build command
+	build_command(MAKECOMMAND CONFIGURATION "\${CTEST_CONFIGURATION_TYPE}")
+	set(MAKECOMMAND
+		${MAKECOMMAND}
+		CACHE
+		STRING
+		"Command to build the project")
+
+	# the default build configuration the ctest build handler will use
+	# if there is no -C arg given to ctest:
+	set(DEFAULT_CTEST_CONFIGURATION_TYPE "$ENV{CMAKE_CONFIG_TYPE}")
+	if(DEFAULT_CTEST_CONFIGURATION_TYPE STREQUAL "")
+		set(DEFAULT_CTEST_CONFIGURATION_TYPE "Release")
+	endif()
+
+	if(NOT "${CMAKE_GENERATOR}" MATCHES "Make")
+		set(CTEST_USE_LAUNCHERS 0)
+	endif()
+
+	if(CTEST_USE_LAUNCHERS)
+		set(CTEST_LAUNCH_COMPILE
+			"\"${CMAKE_CTEST_COMMAND}\" --launch --target-name <TARGET_NAME> --build-dir <CMAKE_CURRENT_BINARY_DIR> --output <OBJECT> --source <SOURCE> --language <LANGUAGE> --")
+		set(CTEST_LAUNCH_LINK
+			"\"${CMAKE_CTEST_COMMAND}\" --launch --target-name <TARGET_NAME> --build-dir <CMAKE_CURRENT_BINARY_DIR> --output <TARGET> --target-type <TARGET_TYPE> --language <LANGUAGE> --")
+		set(CTEST_LAUNCH_CUSTOM
+			"\"${CMAKE_CTEST_COMMAND}\" --launch --target-name <TARGET_NAME> --build-dir <CMAKE_CURRENT_BINARY_DIR> --output <OUTPUT> --")
+		set_property(GLOBAL
+			PROPERTY
+			RULE_LAUNCH_COMPILE
+			"${CTEST_LAUNCH_COMPILE}")
+		set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CTEST_LAUNCH_LINK}")
+		set_property(GLOBAL
+			PROPERTY
+			RULE_LAUNCH_CUSTOM
+			"${CTEST_LAUNCH_CUSTOM}")
+	endif()
+
+	mark_as_advanced(COVERAGE_COMMAND
+		CVSCOMMAND
+		SVNCOMMAND
+		BZRCOMMAND
+		HGCOMMAND
+		GITCOMMAND
+		CVS_UPDATE_OPTIONS
+		SVN_UPDATE_OPTIONS
+		BZR_UPDATE_OPTIONS
+		HG_UPDATE_OPTIONS
+		GIT_UPDATE_OPTIONS
+		MAKECOMMAND
+		MEMORYCHECK_COMMAND
+		MEMORYCHECK_SUPPRESSIONS_FILE
+		PURIFYCOMMAND
+		SCPCOMMAND
+		SLURM_SBATCH_COMMAND
+		SLURM_SRUN_COMMAND
+		SITE)
+
+	if(NOT RUN_FROM_DART)
+		set(RUN_FROM_CTEST_OR_DART 1)
+		include(CTestTargets)
+		set(RUN_FROM_CTEST_OR_DART)
+	endif()
+endif()
diff --git a/cmake-2.8.1-modules/patchctestbug10149/CTestScriptMode.cmake b/cmake-2.8.1-modules/patchctestbug10149/CTestScriptMode.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e6ab6341ba73fd7cc0dd4cab1154ad7c7b31472b
--- /dev/null
+++ b/cmake-2.8.1-modules/patchctestbug10149/CTestScriptMode.cmake
@@ -0,0 +1,51 @@
+# This file is read by ctest in script mode (-S)
+
+#=============================================================================
+# Copyright 2009 Kitware, Inc.
+# Copyright 2009 Alexander Neundorf <neundorf@kde.org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see below.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# 
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# 
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+#   nor the names of their contributors may be used to endorse or promote
+#   products derived from this software without specific prior written
+#   permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+# Determine the current system, so this information can be used
+# in ctest scripts
+include(CMakeDetermineSystem)
+
+# Also load the system specific file, which sets up e.g. the search paths.
+# This makes the FIND_XXX() calls work much better
+include(CMakeSystemSpecificInformation)
+
diff --git a/cmake-2.8.1-modules/patchctestbug10149/CTestTargets.cmake b/cmake-2.8.1-modules/patchctestbug10149/CTestTargets.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..a964a039f039eb24d646371e99010c060e967e79
--- /dev/null
+++ b/cmake-2.8.1-modules/patchctestbug10149/CTestTargets.cmake
@@ -0,0 +1,131 @@
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see below.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# 
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# 
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+#   nor the names of their contributors may be used to endorse or promote
+#   products derived from this software without specific prior written
+#   permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+if(NOT RUN_FROM_CTEST_OR_DART)
+	message(FATAL_ERROR "Do not incldue CTestTargets.cmake directly")
+endif()
+
+# make directories in the binary tree
+file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/Testing/Temporary)
+get_filename_component(CMAKE_HOST_PATH ${CMAKE_COMMAND} PATH)
+set(CMAKE_TARGET_PATH ${EXECUTABLE_OUTPUT_PATH})
+find_program(CMAKE_CTEST_COMMAND
+	ctest
+	${CMAKE_HOST_PATH}
+	${CMAKE_TARGET_PATH})
+mark_as_advanced(CMAKE_CTEST_COMMAND)
+
+# Use CTest
+# configure files
+
+if(CTEST_NEW_FORMAT)
+	configure_file(${CMAKE_ROOT}/Modules/DartConfiguration.tcl.in
+		${PROJECT_BINARY_DIR}/CTestConfiguration.ini)
+else()
+	configure_file(${CMAKE_ROOT}/Modules/DartConfiguration.tcl.in
+		${PROJECT_BINARY_DIR}/DartConfiguration.tcl)
+endif()
+
+#
+# Section 3:
+#
+# Custom targets to perform dashboard builds and submissions.
+# These should NOT need to be modified from project to project.
+#
+
+set(__conf_types "")
+if(CMAKE_CONFIGURATION_TYPES)
+	# We need to pass the configuration type on the test command line.
+	set(__conf_types -C "${CMAKE_CFG_INTDIR}")
+endif()
+
+# Add convenience targets.  Do this at most once in case of nested
+# projects.
+define_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED
+	BRIEF_DOCS "Internal property used by CTestTargets module."
+	FULL_DOCS "Set by the CTestTargets module to track addition of testing targets.")
+
+get_property(_CTEST_TARGETS_ADDED GLOBAL PROPERTY CTEST_TARGETS_ADDED)
+if(NOT _CTEST_TARGETS_ADDED)
+	set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1)
+
+	# For all generators add basic testing targets.
+	foreach(mode Experimental Nightly Continuous NightlyMemoryCheck)
+		add_custom_target(${mode}
+			${CMAKE_CTEST_COMMAND}
+			${__conf_types}
+			-D
+			${mode})
+		set_property(TARGET ${mode} PROPERTY RULE_LAUNCH_CUSTOM "")
+	endforeach()
+
+	# For Makefile generators add more granular targets.
+	if("${CMAKE_GENERATOR}" MATCHES Make)
+		# Make targets for Experimental builds
+		foreach(mode Nightly Experimental Continuous)
+			foreach(testtype
+				Start
+				Update
+				Configure
+				Build
+				Test
+				Coverage
+				MemCheck
+				Submit)	# missing purify
+
+				add_custom_target(${mode}${testtype}
+					${CMAKE_CTEST_COMMAND}
+					${__conf_types}
+					-D
+					${mode}${testtype})
+				set_property(TARGET
+					${mode}${testtype}
+					PROPERTY
+					RULE_LAUNCH_CUSTOM
+					"")
+			endforeach()
+		endforeach()
+	endif() # makefile generators
+
+endif()
diff --git a/cmake-2.8.3-modules/FixWinInstallPrefix.cmake b/cmake-2.8.3-modules/FixWinInstallPrefix.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..8169ddd6271464f44428c66e19b217ad90a95d29
--- /dev/null
+++ b/cmake-2.8.3-modules/FixWinInstallPrefix.cmake
@@ -0,0 +1,77 @@
+# - Automatically fix CMAKE_INSTALL_PREFIX to be bit-appropriate on Win
+#
+# This is a workaround for CMake bug #9992 in at least <=2.8.0 - see
+# http://public.kitware.com/Bug/view.php?id=9992
+#
+# It runs automatically when included on a Windows build (passes if(WIN32)) -
+# include after setting your project name (and your module search path,
+# obviously)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(WIN32)
+	# caution - ENV{ProgramFiles} on Win64 is adjusted to point to the arch
+	# of the running executable which, since CMake is 32-bit on Windows as
+	# I write this, will always be = $ENV{ProgramFiles(x86)}.
+	# Thus, we only use this environment variable if we are on a 32 machine
+
+	# 32-bit dir on win32, useless to us on win64
+	file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _PROG_FILES)
+
+	# 32-bit dir: only set on win64
+	file(TO_CMAKE_PATH "$ENV{ProgramFiles(x86)}" _PROG_FILES_X86)
+
+	# 64-bit dir: only set on win64
+	file(TO_CMAKE_PATH "$ENV{ProgramW6432}" _PROG_FILES_W6432)
+
+	if(CMAKE_SIZEOF_VOID_P MATCHES "8")
+		# 64-bit build on win64
+		set(_PROGFILESDIR "${_PROG_FILES_W6432}")
+	else()
+		if(_PROG_FILES_W6432)
+			# 32-bit build on win64
+			set(_PROGFILESDIR "${_PROG_FILES_X86}")
+		else()
+			# 32-bit build on win32
+			set(_PROGFILESDIR "${_PROG_FILES}")
+		endif()
+	endif()
+
+	if(NOT FIXWININSTALLPREFIX_PREFIX)
+		set(_needsfix yes)
+	elseif(NOT
+		"${FIXWININSTALLPREFIX_PREFIX}"
+		STREQUAL
+		"${CMAKE_INSTALL_PREFIX}")
+		set(_needsfix yes)
+	else()
+		set(_needsfix)
+	endif()
+
+	if(_needsfix)
+		if("${CMAKE_INSTALL_PREFIX}"
+			STREQUAL
+			"${_PROG_FILES}/${CMAKE_PROJECT_NAME}")
+			# The user didn't change this yet - it's the potentially broken default
+			set(CMAKE_INSTALL_PREFIX
+				"${_PROGFILESDIR}/${CMAKE_PROJECT_NAME}"
+				CACHE
+				PATH
+				"Where to install the project - has been adjusted by FixWinInstallPrefix"
+				FORCE)
+		endif()
+		set(FIXWININSTALLPREFIX_PREFIX
+			"${CMAKE_INSTALL_PREFIX}"
+			CACHE
+			INTERNAL
+			"We've fixed the prefix.")
+	endif()
+endif()
diff --git a/cmake-2.8.3-modules/autoinclude.cmake b/cmake-2.8.3-modules/autoinclude.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..64d8f62b90be741ce9ecb525fa9556cc353a60df
--- /dev/null
+++ b/cmake-2.8.3-modules/autoinclude.cmake
@@ -0,0 +1,13 @@
+# - Autoinclude these policies automatically
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+include(FixWinInstallPrefix)
diff --git a/cmake-2.8.4-modules/ImproveEclipseGCCErrors.cmake b/cmake-2.8.4-modules/ImproveEclipseGCCErrors.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..2f7f3170d62e4f347767cf1ed81c4a8eea6c9923
--- /dev/null
+++ b/cmake-2.8.4-modules/ImproveEclipseGCCErrors.cmake
@@ -0,0 +1,19 @@
+# - Add a GCC flag so that the errors are more suitable to parsing by Eclipse
+#
+#  include(ImproveEclipseGCCErrors)
+#
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if("${CMAKE_GENERATOR}" MATCHES "Eclipse" AND CMAKE_COMPILER_IS_GNUCXX)
+	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
+endif()
diff --git a/cmake-2.8.4-modules/autoinclude.cmake b/cmake-2.8.4-modules/autoinclude.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..2c98e249991fe29da3711b76580d210f95c2dcf0
--- /dev/null
+++ b/cmake-2.8.4-modules/autoinclude.cmake
@@ -0,0 +1,13 @@
+# - Autoinclude these policies automatically
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+include(ImproveEclipseGCCErrors)
diff --git a/cmake-2.8.4-modules/boost/FindBoost.cmake b/cmake-2.8.4-modules/boost/FindBoost.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9dbfb8023ec76f3fc34bcba9aa82a8ce29280530
--- /dev/null
+++ b/cmake-2.8.4-modules/boost/FindBoost.cmake
@@ -0,0 +1,1171 @@
+# - Try to find Boost include dirs and libraries
+# Usage of this module as follows:
+#
+# NOTE: Take note of the Boost_ADDITIONAL_VERSIONS variable below.
+# Due to Boost naming conventions and limitations in CMake this find
+# module is NOT future safe with respect to Boost version numbers,
+# and may break.
+#
+# == Using Header-Only libraries from within Boost: ==
+#
+#   find_package( Boost 1.36.0 )
+#   if(Boost_FOUND)
+#      include_directories(${Boost_INCLUDE_DIRS})
+#      add_executable(foo foo.cc)
+#   endif()
+#
+#
+# == Using actual libraries from within Boost: ==
+#
+#   set(Boost_USE_STATIC_LIBS        ON)
+#   set(Boost_USE_MULTITHREADED      ON)
+#   set(Boost_USE_STATIC_RUNTIME    OFF)
+#   find_package( Boost 1.36.0 COMPONENTS date_time filesystem system ... )
+#
+#   if(Boost_FOUND)
+#      include_directories(${Boost_INCLUDE_DIRS})
+#      add_executable(foo foo.cc)
+#      target_link_libraries(foo ${Boost_LIBRARIES})
+#   endif()
+#
+#
+# The components list needs to contain actual names of boost libraries only,
+# such as "date_time" for "libboost_date_time".  If you're using parts of
+# Boost that contain header files only (e.g. foreach) you do not need to
+# specify COMPONENTS.
+#
+# You should provide a minimum version number that should be used. If you provide this
+# version number and specify the REQUIRED attribute, this module will fail if it
+# can't find the specified or a later version. If you specify a version number this is
+# automatically put into the considered list of version numbers and thus doesn't need
+# to be specified in the Boost_ADDITIONAL_VERSIONS variable (see below).
+#
+# NOTE for Visual Studio Users:
+#     Automatic linking is used on MSVC & Borland compilers by default when
+#     #including things in Boost.  It's important to note that setting
+#     Boost_USE_STATIC_LIBS to OFF is NOT enough to get you dynamic linking,
+#     should you need this feature.  Automatic linking typically uses static
+#     libraries with a few exceptions (Boost.Python is one).
+#
+#     Please see the section below near Boost_LIB_DIAGNOSTIC_DEFINITIONS for
+#     more details.  Adding a TARGET_LINK_LIBRARIES() as shown in the example
+#     above appears to cause VS to link dynamically if Boost_USE_STATIC_LIBS
+#     gets set to OFF.  It is suggested you avoid automatic linking since it
+#     will make your application less portable.
+#
+# =========== The mess that is Boost_ADDITIONAL_VERSIONS (sorry?) ============
+#
+# OK, so the Boost_ADDITIONAL_VERSIONS variable can be used to specify a list of
+# boost version numbers that should be taken into account when searching
+# for Boost. Unfortunately boost puts the version number into the
+# actual filename for the libraries, so this variable will certainly be needed
+# in the future when new Boost versions are released.
+#
+# Currently this module searches for the following version numbers:
+# 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1,
+# 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0,
+# 1.40, 1.40.0, 1.41, 1.41.0, 1.42, 1.42.0, 1.43, 1.43.0, 1.44, 1.44.0,
+# 1.45, 1.45.0, 1.46, 1.46.0
+#
+# NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should
+# add both 1.x and 1.x.0 as shown above.  Official Boost include directories
+# omit the 3rd version number from include paths if it is 0 although not all
+# binary Boost releases do so.
+#
+# SET(Boost_ADDITIONAL_VERSIONS "1.78" "1.78.0" "1.79" "1.79.0")
+#
+# ===================================== ============= ========================
+#
+# Variables used by this module, they can change the default behaviour and
+# need to be set before calling find_package:
+#
+#   Boost_USE_MULTITHREADED      Can be set to OFF to use the non-multithreaded
+#                                boost libraries.  If not specified, defaults
+#                                to ON.
+#
+#   Boost_USE_STATIC_LIBS        Can be set to ON to force the use of the static
+#                                boost libraries. Defaults to OFF.
+#
+#   Boost_NO_SYSTEM_PATHS        Set to TRUE to suppress searching in system
+#                                paths (or other locations outside of BOOST_ROOT
+#                                or BOOST_INCLUDEDIR).  Useful when specifying
+#                                BOOST_ROOT. Defaults to OFF.
+#                                  [Since CMake 2.8.3]
+#
+#   Boost_USE_STATIC_RUNTIME     If enabled, searches for boost libraries
+#                                linked against a static C++ standard library
+#                                ('s' ABI tag). This option should be set to
+#                                ON or OFF because the default behavior
+#                                if not specified is platform dependent
+#                                for backwards compatibility.
+#                                  [Since CMake 2.8.3]
+#
+#   Boost_USE_DEBUG_PYTHON       If enabled, searches for boost libraries
+#                                compiled against a special debug build of
+#                                Python ('y' ABI tag). Defaults to OFF.
+#                                  [Since CMake 2.8.3]
+#
+#   Boost_USE_STLPORT            If enabled, searches for boost libraries
+#                                compiled against the STLPort standard
+#                                library ('p' ABI tag). Defaults to OFF.
+#                                  [Since CMake 2.8.3]
+#
+#   Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
+#                                If enabled, searches for boost libraries
+#                                compiled against the deprecated STLPort
+#                                "native iostreams" feature ('n' ABI tag).
+#                                Defaults to OFF.
+#                                  [Since CMake 2.8.3]
+#
+# Other Variables used by this module which you may want to set.
+#
+#   Boost_ADDITIONAL_VERSIONS    A list of version numbers to use for searching
+#                                the boost include directory.  Please see
+#                                the documentation above regarding this
+#                                annoying, but necessary variable :(
+#
+#   Boost_DEBUG                  Set this to TRUE to enable debugging output
+#                                of FindBoost.cmake if you are having problems.
+#                                Please enable this before filing any bug
+#                                reports.
+#
+#   Boost_DETAILED_FAILURE_MSG   FindBoost doesn't output detailed information
+#                                about why it failed or how to fix the problem
+#                                unless this is set to TRUE or the REQUIRED
+#                                keyword is specified in find_package().
+#                                  [Since CMake 2.8.0]
+#
+#   Boost_COMPILER               Set this to the compiler suffix used by Boost
+#                                (e.g. "-gcc43") if FindBoost has problems finding
+#                                the proper Boost installation
+#
+#   Boost_THREADAPI                When building boost.thread, sometimes the name of the
+#                                library contains an additional "pthread" or "win32"
+#                                string known as the threadapi.  This can happen when
+#                                compiling against pthreads on Windows or win32 threads
+#                                on Cygwin.  You may specify this variable and if set
+#                                when FindBoost searches for the Boost threading library
+#                                it will first try to match the threadapi you specify.
+#                                  For Example: libboost_thread_win32-mgw45-mt-1_43.a
+#                                might be found if you specified "win32" here before
+#                                falling back on libboost_thread-mgw45-mt-1_43.a.
+#                                  [Since CMake 2.8.3]
+#
+#   Boost_REALPATH               Resolves symbolic links for discovered boost libraries
+#                                to assist with packaging.  For example, instead of
+#                                Boost_SYSTEM_LIBRARY_RELEASE being resolved to
+#                                "/usr/lib/libboost_system.so" it would be
+#                                "/usr/lib/libboost_system.so.1.42.0" instead.
+#                                This does not affect linking and should not be
+#                                enabled unless the user needs this information.
+#                                  [Since CMake 2.8.3]
+#
+
+
+#
+# These last three variables are available also as environment variables:
+#
+#   BOOST_ROOT or BOOSTROOT      The preferred installation prefix for searching for
+#                                Boost.  Set this if the module has problems finding
+#                                the proper Boost installation.  To prevent falling
+#                                back on the system paths, set Boost_NO_SYSTEM_PATHS
+#                                to true.
+#
+#   BOOST_INCLUDEDIR             Set this to the include directory of Boost, if the
+#                                module has problems finding the proper Boost installation
+#
+#   BOOST_LIBRARYDIR             Set this to the lib directory of Boost, if the
+#                                module has problems finding the proper Boost installation
+#
+# Variables defined by this module:
+#
+#   Boost_FOUND                         System has Boost, this means the include dir was
+#                                       found, as well as all the libraries specified in
+#                                       the COMPONENTS list.
+#
+#   Boost_INCLUDE_DIRS                  Boost include directories: not cached
+#
+#   Boost_INCLUDE_DIR                   This is almost the same as above, but this one is
+#                                       cached and may be modified by advanced users
+#
+#   Boost_LIBRARIES                     Link to these to use the Boost libraries that you
+#                                       specified: not cached
+#
+#   Boost_LIBRARY_DIRS                  The path to where the Boost library files are.
+#
+#   Boost_VERSION                       The version number of the boost libraries that
+#                                       have been found, same as in version.hpp from Boost
+#
+#   Boost_LIB_VERSION                   The version number in filename form as
+#                                       it's appended to the library filenames
+#
+#   Boost_MAJOR_VERSION                 major version number of boost
+#   Boost_MINOR_VERSION                 minor version number of boost
+#   Boost_SUBMINOR_VERSION              subminor version number of boost
+#
+#   Boost_LIB_DIAGNOSTIC_DEFINITIONS    [WIN32 Only] You can call
+#                                       add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
+#                                       to have diagnostic information about Boost's
+#                                       automatic linking outputted during compilation time.
+#
+# For each component you specify in find_package(), the following (UPPER-CASE)
+# variables are set.  You can use these variables if you would like to pick and
+# choose components for your targets instead of just using Boost_LIBRARIES.
+#
+#   Boost_${COMPONENT}_FOUND            True IF the Boost library "component" was found.
+#
+#   Boost_${COMPONENT}_LIBRARY          Contains the libraries for the specified Boost
+#                                       "component" (includes debug and optimized keywords
+#                                       when needed).
+
+#=============================================================================
+# Copyright 2006-2009 Kitware, Inc.
+# Copyright 2006-2008 Andreas Schneider <mail@cynapses.org>
+# Copyright 2007      Wengo
+# Copyright 2007      Mike Jackson
+# Copyright 2008      Andreas Pakulat <apaku@gmx.de>
+# Copyright 2008-2010 Philip Lowman <philip@yhbt.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see below.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# 
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# 
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+#   nor the names of their contributors may be used to endorse or promote
+#   products derived from this software without specific prior written
+#   permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+#-------------------------------------------------------------------------------
+#  FindBoost functions & macros
+#
+############################################
+#
+# Check the existence of the libraries.
+#
+############################################
+# This macro was taken directly from the FindQt4.cmake file that is included
+# with the CMake distribution. This is NOT my work. All work was done by the
+# original authors of the FindQt4.cmake file. Only minor modifications were
+# made to remove references to Qt and make this file more generally applicable
+# And ELSE/ENDIF pairs were removed for readability.
+#########################################################################
+
+MACRO (_Boost_ADJUST_LIB_VARS basename)
+  IF (Boost_INCLUDE_DIR )
+    IF (Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE)
+      # if the generator supports configuration types then set
+      # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value
+      IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
+        SET(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
+      ELSE()
+        # if there are no configuration types and CMAKE_BUILD_TYPE has no value
+        # then just use the release libraries
+        SET(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
+      ENDIF()
+      # FIXME: This probably should be set for both cases
+      SET(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
+    ENDIF()
+
+    # if only the release version was found, set the debug variable also to the release version
+    IF (Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG)
+      SET(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE})
+      SET(Boost_${basename}_LIBRARY       ${Boost_${basename}_LIBRARY_RELEASE})
+      SET(Boost_${basename}_LIBRARIES     ${Boost_${basename}_LIBRARY_RELEASE})
+    ENDIF()
+
+    # if only the debug version was found, set the release variable also to the debug version
+    IF (Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE)
+      SET(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG})
+      SET(Boost_${basename}_LIBRARY         ${Boost_${basename}_LIBRARY_DEBUG})
+      SET(Boost_${basename}_LIBRARIES       ${Boost_${basename}_LIBRARY_DEBUG})
+    ENDIF()
+
+    IF (Boost_${basename}_LIBRARY)
+      set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY} CACHE FILEPATH "The Boost ${basename} library")
+
+      # Remove superfluous "debug" / "optimized" keywords from
+      # Boost_LIBRARY_DIRS
+      FOREACH(_boost_my_lib ${Boost_${basename}_LIBRARY})
+        GET_FILENAME_COMPONENT(_boost_my_lib_path "${_boost_my_lib}" PATH)
+        LIST(APPEND Boost_LIBRARY_DIRS ${_boost_my_lib_path})
+      ENDFOREACH()
+      LIST(REMOVE_DUPLICATES Boost_LIBRARY_DIRS)
+
+      set(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIRS} CACHE FILEPATH "Boost library directory")
+      SET(Boost_${basename}_FOUND ON CACHE INTERNAL "Whether the Boost ${basename} library found")
+    ENDIF(Boost_${basename}_LIBRARY)
+
+  ENDIF (Boost_INCLUDE_DIR )
+  # Make variables changeble to the advanced user
+  MARK_AS_ADVANCED(
+      Boost_${basename}_LIBRARY
+      Boost_${basename}_LIBRARY_RELEASE
+      Boost_${basename}_LIBRARY_DEBUG
+  )
+ENDMACRO (_Boost_ADJUST_LIB_VARS)
+
+#-------------------------------------------------------------------------------
+
+#
+# Runs compiler with "-dumpversion" and parses major/minor
+# version with a regex.
+#
+FUNCTION(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION)
+
+  EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
+    ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
+    OUTPUT_VARIABLE _boost_COMPILER_VERSION
+  )
+  STRING(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
+    _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION})
+
+  SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE)
+ENDFUNCTION()
+
+#
+# A convenience function for marking desired components
+# as found or not
+#
+function(_Boost_MARK_COMPONENTS_FOUND _yes_or_no)
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+    set(Boost_${UPPERCOMPONENT}_FOUND ${_yes_or_no} CACHE INTERNAL "Whether the Boost ${COMPONENT} library found" FORCE)
+  endforeach()
+endfunction()
+
+#
+# Take a list of libraries with "thread" in it
+# and prepend duplicates with "thread_${Boost_THREADAPI}"
+# at the front of the list
+#
+function(_Boost_PREPEND_LIST_WITH_THREADAPI _output)
+  set(_orig_libnames ${ARGN})
+  string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames ${_orig_libnames})
+  set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE)
+endfunction()
+
+#
+# If a library is found, replace its cache entry with its REALPATH
+#
+function(_Boost_SWAP_WITH_REALPATH _library _docstring)
+  if(${_library})
+    get_filename_component(_boost_filepathreal ${${_library}} REALPATH)
+    unset(${_library} CACHE)
+    set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}")
+  endif()
+endfunction()
+
+#
+# End functions/macros
+#
+#-------------------------------------------------------------------------------
+
+
+
+
+IF(NOT DEFINED Boost_USE_MULTITHREADED)
+    SET(Boost_USE_MULTITHREADED TRUE)
+ENDIF()
+
+if(Boost_FIND_VERSION_EXACT)
+  # The version may appear in a directory with or without the patch
+  # level, even when the patch level is non-zero.
+  set(_boost_TEST_VERSIONS
+    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}"
+    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
+else(Boost_FIND_VERSION_EXACT)
+  # The user has not requested an exact version.  Among known
+  # versions, find those that are acceptable to the user request.
+  set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
+    "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
+    "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
+    "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
+    "1.34" "1.33.1" "1.33.0" "1.33")
+  set(_boost_TEST_VERSIONS)
+  if(Boost_FIND_VERSION)
+    set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
+    # Select acceptable versions.
+    foreach(version ${_Boost_KNOWN_VERSIONS})
+      if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}")
+        # This version is high enough.
+        list(APPEND _boost_TEST_VERSIONS "${version}")
+      elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99")
+        # This version is a short-form for the requested version with
+        # the patch level dropped.
+        list(APPEND _boost_TEST_VERSIONS "${version}")
+      endif()
+    endforeach(version)
+  else(Boost_FIND_VERSION)
+    # Any version is acceptable.
+    set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}")
+  endif(Boost_FIND_VERSION)
+endif(Boost_FIND_VERSION_EXACT)
+
+# The reason that we failed to find Boost. This will be set to a
+# user-friendly message when we fail to find some necessary piece of
+# Boost.
+set(Boost_ERROR_REASON)
+
+SET( _boost_IN_CACHE TRUE)
+IF(Boost_INCLUDE_DIR)
+
+  # On versions < 1.35, remove the System library from the considered list
+  # since it wasn't added until 1.35.
+  if(Boost_VERSION AND Boost_FIND_COMPONENTS)
+     if(Boost_VERSION LESS 103500)
+       list(REMOVE_ITEM Boost_FIND_COMPONENTS system)
+     endif()
+  endif()
+
+  FOREACH(COMPONENT ${Boost_FIND_COMPONENTS})
+    STRING(TOUPPER ${COMPONENT} COMPONENT)
+    IF(NOT Boost_${COMPONENT}_FOUND)
+      SET( _boost_IN_CACHE FALSE)
+    ENDIF(NOT Boost_${COMPONENT}_FOUND)
+  ENDFOREACH(COMPONENT)
+ELSE(Boost_INCLUDE_DIR)
+  SET( _boost_IN_CACHE FALSE)
+ENDIF(Boost_INCLUDE_DIR)
+
+IF (_boost_IN_CACHE)
+  # in cache already
+  SET(Boost_FOUND TRUE)
+  FOREACH(COMPONENT ${Boost_FIND_COMPONENTS})
+    STRING(TOUPPER ${COMPONENT} COMPONENT)
+    _Boost_ADJUST_LIB_VARS( ${COMPONENT} )
+    SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${COMPONENT}_LIBRARY})
+  ENDFOREACH(COMPONENT)
+  SET(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
+  IF(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
+    MATH(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
+    MATH(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
+    MATH(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
+  ENDIF(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
+  if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION} "
+                     "is already in the cache.  To view debugging messages, please clear the cache.")
+  endif()
+ELSE (_boost_IN_CACHE)
+  # Need to search for boost
+  if(Boost_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Boost not in cache")
+    # Output some of their choices
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Boost_USE_MULTITHREADED = ${Boost_USE_MULTITHREADED}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Boost_USE_STATIC_LIBS = ${Boost_USE_STATIC_LIBS}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Boost_USE_STATIC_RUNTIME = ${Boost_USE_STATIC_RUNTIME}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Boost_ADDITIONAL_VERSIONS = ${Boost_ADDITIONAL_VERSIONS}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Boost_NO_SYSTEM_PATHS = ${Boost_NO_SYSTEM_PATHS}")
+  endif()
+
+  IF(WIN32)
+    # In windows, automatic linking is performed, so you do not have
+    # to specify the libraries.  If you are linking to a dynamic
+    # runtime, then you can choose to link to either a static or a
+    # dynamic Boost library, the default is to do a static link.  You
+    # can alter this for a specific library "whatever" by defining
+    # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
+    # linked dynamically.  Alternatively you can force all Boost
+    # libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
+
+    # This feature can be disabled for Boost library "whatever" by
+    # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
+    # BOOST_ALL_NO_LIB.
+
+    # If you want to observe which libraries are being linked against
+    # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
+    # code to emit a #pragma message each time a library is selected
+    # for linking.
+    SET(Boost_LIB_DIAGNOSTIC_DEFINITIONS
+      "-DBOOST_LIB_DIAGNOSTIC" CACHE STRING "Boost diagnostic define")
+  ENDIF(WIN32)
+
+  set(_boost_INCLUDE_SEARCH_DIRS_SYSTEM
+    C:/boost/include
+    C:/boost
+    "$ENV{ProgramFiles}/boost/include"
+    "$ENV{ProgramFiles}/boost"
+    /sw/local/include
+  )
+
+  # If Boost_ROOT was defined, gently correct the user
+  if(Boost_ROOT)
+    message("WARNING: Boost_ROOT was set which is incorrect and is being ignored.  "
+            "You need to use BOOST_ROOT instead.  "
+            "Also, we suggest setting Boost_NO_SYSTEM_PATHS.")
+  endif()
+
+  # If BOOST_ROOT was defined in the environment, use it.
+  if (NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "")
+    set(BOOST_ROOT $ENV{BOOST_ROOT})
+  endif(NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "")
+
+  # If BOOSTROOT was defined in the environment, use it.
+  if (NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "")
+    set(BOOST_ROOT $ENV{BOOSTROOT})
+  endif(NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "")
+
+  # If BOOST_INCLUDEDIR was defined in the environment, use it.
+  IF( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" )
+    set(BOOST_INCLUDEDIR $ENV{BOOST_INCLUDEDIR})
+  ENDIF( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" )
+
+  # If BOOST_LIBRARYDIR was defined in the environment, use it.
+  IF( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" )
+    set(BOOST_LIBRARYDIR $ENV{BOOST_LIBRARYDIR})
+  ENDIF( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" )
+
+  IF( BOOST_ROOT )
+    file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT)
+  ENDIF( BOOST_ROOT )
+
+  if(Boost_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "Declared as CMake or Environmental Variables:")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "  BOOST_ROOT = ${BOOST_ROOT}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "  BOOST_INCLUDEDIR = ${BOOST_INCLUDEDIR}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "  BOOST_LIBRARYDIR = ${BOOST_LIBRARYDIR}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}")
+  endif()
+
+  if( Boost_NO_SYSTEM_PATHS)
+    set(_boost_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH)
+  else()
+    set(_boost_INCLUDE_SEARCH_DIRS ${_boost_INCLUDE_SEARCH_DIRS_SYSTEM})
+  endif()
+
+  if( BOOST_ROOT )
+    set(_boost_INCLUDE_SEARCH_DIRS
+      ${BOOST_ROOT}/include
+      ${BOOST_ROOT}
+      ${_boost_INCLUDE_SEARCH_DIRS})
+  endif()
+
+  # prepend BOOST_INCLUDEDIR to search path if specified
+  if( BOOST_INCLUDEDIR )
+    file(TO_CMAKE_PATH ${BOOST_INCLUDEDIR} BOOST_INCLUDEDIR)
+    set(_boost_INCLUDE_SEARCH_DIRS
+      ${BOOST_INCLUDEDIR} ${_boost_INCLUDE_SEARCH_DIRS})
+  endif( BOOST_INCLUDEDIR )
+
+  # ------------------------------------------------------------------------
+  #  Search for Boost include DIR
+  # ------------------------------------------------------------------------
+  # Try to find Boost by stepping backwards through the Boost versions
+  # we know about.
+  IF( NOT Boost_INCLUDE_DIR )
+    # Build a list of path suffixes for each version.
+    SET(_boost_PATH_SUFFIXES)
+    FOREACH(_boost_VER ${_boost_TEST_VERSIONS})
+      # Add in a path suffix, based on the required version, ideally
+      # we could read this from version.hpp, but for that to work we'd
+      # need to know the include dir already
+      set(_boost_BOOSTIFIED_VERSION)
+
+      # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
+      IF(_boost_VER MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
+          STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1_\\2_\\3"
+            _boost_BOOSTIFIED_VERSION ${_boost_VER})
+      ELSEIF(_boost_VER MATCHES "[0-9]+\\.[0-9]+")
+          STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2"
+            _boost_BOOSTIFIED_VERSION ${_boost_VER})
+      ENDIF()
+
+      list(APPEND _boost_PATH_SUFFIXES "boost-${_boost_BOOSTIFIED_VERSION}")
+      list(APPEND _boost_PATH_SUFFIXES "boost_${_boost_BOOSTIFIED_VERSION}")
+
+    ENDFOREACH(_boost_VER)
+
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "Include debugging info:")
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "  _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS}")
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "  _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}")
+    endif()
+
+    # Look for a standard boost header file.
+    FIND_PATH(Boost_INCLUDE_DIR
+      NAMES         boost/config.hpp
+      HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
+      PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
+      ${_boost_FIND_OPTIONS}
+      )
+  ENDIF( NOT Boost_INCLUDE_DIR )
+
+  # ------------------------------------------------------------------------
+  #  Extract version information from version.hpp
+  # ------------------------------------------------------------------------
+
+  IF(Boost_INCLUDE_DIR)
+    # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp
+    # Read the whole file:
+    #
+    SET(BOOST_VERSION 0)
+    SET(BOOST_LIB_VERSION "")
+    FILE(READ "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS)
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp")
+    endif()
+
+    STRING(REGEX REPLACE ".*#define BOOST_VERSION ([0-9]+).*" "\\1" Boost_VERSION "${_boost_VERSION_HPP_CONTENTS}")
+    STRING(REGEX REPLACE ".*#define BOOST_LIB_VERSION \"([0-9_]+)\".*" "\\1" Boost_LIB_VERSION "${_boost_VERSION_HPP_CONTENTS}")
+
+    SET(Boost_LIB_VERSION ${Boost_LIB_VERSION} CACHE INTERNAL "The library version string for boost libraries")
+    SET(Boost_VERSION ${Boost_VERSION} CACHE INTERNAL "The version number for boost libraries")
+
+    IF(NOT "${Boost_VERSION}" STREQUAL "0")
+      MATH(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
+      MATH(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
+      MATH(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
+
+      set(Boost_ERROR_REASON
+          "${Boost_ERROR_REASON}Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}")
+    ENDIF(NOT "${Boost_VERSION}" STREQUAL "0")
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "version.hpp reveals boost "
+                     "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
+    endif()
+  ELSE(Boost_INCLUDE_DIR)
+    set(Boost_ERROR_REASON
+      "${Boost_ERROR_REASON}Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers.")
+  ENDIF(Boost_INCLUDE_DIR)
+
+  # ------------------------------------------------------------------------
+  #  Suffix initialization and compiler suffix detection.
+  # ------------------------------------------------------------------------
+
+  # Setting some more suffixes for the library
+  SET (Boost_LIB_PREFIX "")
+  if ( WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN)
+    SET (Boost_LIB_PREFIX "lib")
+  endif()
+
+  if (Boost_COMPILER)
+    set(_boost_COMPILER ${Boost_COMPILER})
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "using user-specified Boost_COMPILER = ${_boost_COMPILER}")
+    endif()
+  else(Boost_COMPILER)
+    # Attempt to guess the compiler suffix
+    # NOTE: this is not perfect yet, if you experience any issues
+    # please report them and use the Boost_COMPILER variable
+    # to work around the problems.
+    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel"
+        OR "${CMAKE_CXX_COMPILER}" MATCHES "icl"
+        OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc")
+      if(WIN32)
+        set (_boost_COMPILER "-iw")
+      else()
+        set (_boost_COMPILER "-il")
+      endif()
+    elseif (MSVC90)
+      SET (_boost_COMPILER "-vc90")
+    elseif (MSVC10)
+      SET (_boost_COMPILER "-vc100")
+    elseif (MSVC80)
+      SET (_boost_COMPILER "-vc80")
+    elseif (MSVC71)
+      SET (_boost_COMPILER "-vc71")
+    elseif (MSVC70) # Good luck!
+      SET (_boost_COMPILER "-vc7") # yes, this is correct
+    elseif (MSVC60) # Good luck!
+      SET (_boost_COMPILER "-vc6") # yes, this is correct
+    elseif (BORLAND)
+      SET (_boost_COMPILER "-bcb")
+    elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro")
+      set(_boost_COMPILER "-sw")
+    elseif (MINGW)
+      if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
+          SET(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34
+      else()
+        _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
+        SET (_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
+      endif()
+    elseif (UNIX)
+      if (CMAKE_COMPILER_IS_GNUCXX)
+        if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
+          SET(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34
+        else()
+          _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION)
+          # Determine which version of GCC we have.
+          IF(APPLE)
+            IF(Boost_MINOR_VERSION)
+              IF(${Boost_MINOR_VERSION} GREATER 35)
+                # In Boost 1.36.0 and newer, the mangled compiler name used
+                # on Mac OS X/Darwin is "xgcc".
+                SET(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
+              ELSE(${Boost_MINOR_VERSION} GREATER 35)
+                # In Boost <= 1.35.0, there is no mangled compiler name for
+                # the Mac OS X/Darwin version of GCC.
+                SET(_boost_COMPILER "")
+              ENDIF(${Boost_MINOR_VERSION} GREATER 35)
+            ELSE(Boost_MINOR_VERSION)
+              # We don't know the Boost version, so assume it's
+              # pre-1.36.0.
+              SET(_boost_COMPILER "")
+            ENDIF(Boost_MINOR_VERSION)
+          ELSE()
+            SET (_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
+          ENDIF()
+        endif()
+      endif (CMAKE_COMPILER_IS_GNUCXX)
+    endif()
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+        "guessed _boost_COMPILER = ${_boost_COMPILER}")
+    endif()
+  endif(Boost_COMPILER)
+
+  set (_boost_MULTITHREADED "-mt")
+  if( NOT Boost_USE_MULTITHREADED )
+    set (_boost_MULTITHREADED "")
+  endif()
+  if(Boost_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+      "_boost_MULTITHREADED = ${_boost_MULTITHREADED}")
+  endif()
+
+  #======================
+  # Systematically build up the Boost ABI tag
+  # http://boost.org/doc/libs/1_41_0/more/getting_started/windows.html#library-naming
+  set( _boost_RELEASE_ABI_TAG "-")
+  set( _boost_DEBUG_ABI_TAG   "-")
+  # Key       Use this library when:
+  #  s        linking statically to the C++ standard library and
+  #           compiler runtime support libraries.
+  if(Boost_USE_STATIC_RUNTIME)
+    set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s")
+    set( _boost_DEBUG_ABI_TAG   "${_boost_DEBUG_ABI_TAG}s")
+  endif()
+  #  g        using debug versions of the standard and runtime
+  #           support libraries
+  if(WIN32)
+    if(MSVC OR "${CMAKE_CXX_COMPILER}" MATCHES "icl"
+            OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc")
+      set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}g")
+    endif()
+  endif()
+  #  y        using special debug build of python
+  if(Boost_USE_DEBUG_PYTHON)
+    set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}y")
+  endif()
+  #  d        using a debug version of your code
+  set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}d")
+  #  p        using the STLport standard library rather than the
+  #           default one supplied with your compiler
+  if(Boost_USE_STLPORT)
+    set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}p")
+    set( _boost_DEBUG_ABI_TAG   "${_boost_DEBUG_ABI_TAG}p")
+  endif()
+  #  n        using the STLport deprecated "native iostreams" feature
+  if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS)
+    set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}n")
+    set( _boost_DEBUG_ABI_TAG   "${_boost_DEBUG_ABI_TAG}n")
+  endif()
+
+  if(Boost_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+      "_boost_RELEASE_ABI_TAG = ${_boost_RELEASE_ABI_TAG}")
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+      "_boost_DEBUG_ABI_TAG = ${_boost_DEBUG_ABI_TAG}")
+  endif()
+
+  # ------------------------------------------------------------------------
+  #  Begin finding boost libraries
+  # ------------------------------------------------------------------------
+
+  if(BOOST_ROOT)
+    set(_boost_LIBRARY_SEARCH_DIRS_ALWAYS
+      ${BOOST_ROOT}/lib
+      ${BOOST_ROOT}/stage/lib)
+  endif()
+  set(_boost_LIBRARY_SEARCH_DIRS_ALWAYS
+    ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS}
+    ${Boost_INCLUDE_DIR}/lib
+    ${Boost_INCLUDE_DIR}/../lib
+    ${Boost_INCLUDE_DIR}/stage/lib
+  )
+  set(_boost_LIBRARY_SEARCH_DIRS_SYSTEM
+    C:/boost/lib
+    C:/boost
+    "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}_${Boost_SUBMINOR_VERSION}/lib"
+    "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}/lib"
+    "$ENV{ProgramFiles}/boost/lib"
+    "$ENV{ProgramFiles}/boost"
+    /sw/local/lib
+  )
+  set(_boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS})
+  if( Boost_NO_SYSTEM_PATHS )
+    set(_boost_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH)
+  else()
+    list(APPEND _boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_SYSTEM})
+  endif()
+
+  # prepend BOOST_LIBRARYDIR to search path if specified
+  if( BOOST_LIBRARYDIR )
+    file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR)
+    set(_boost_LIBRARY_SEARCH_DIRS
+      ${BOOST_LIBRARYDIR} ${_boost_LIBRARY_SEARCH_DIRS})
+  endif()
+
+  if(Boost_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+      "_boost_LIBRARY_SEARCH_DIRS = ${_boost_LIBRARY_SEARCH_DIRS}")
+  endif()
+
+  # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
+  if( Boost_USE_STATIC_LIBS )
+    set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    if(WIN32)
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    else()
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
+    endif()
+  endif()
+
+  # We want to use the tag inline below without risking double dashes
+  if(_boost_RELEASE_ABI_TAG)
+    if(${_boost_RELEASE_ABI_TAG} STREQUAL "-")
+      set(_boost_RELEASE_ABI_TAG "")
+    endif()
+  endif()
+  if(_boost_DEBUG_ABI_TAG)
+    if(${_boost_DEBUG_ABI_TAG} STREQUAL "-")
+      set(_boost_DEBUG_ABI_TAG "")
+    endif()
+  endif()
+
+  # The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled
+  # on WIN32 was to:
+  #  1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found)
+  #  2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found)
+  # We maintain this behavior since changing it could break people's builds.
+  # To disable the ambiguous behavior, the user need only
+  # set Boost_USE_STATIC_RUNTIME either ON or OFF.
+  set(_boost_STATIC_RUNTIME_WORKAROUND false)
+  if(WIN32 AND Boost_USE_STATIC_LIBS)
+    if(NOT DEFINED Boost_USE_STATIC_RUNTIME)
+      set(_boost_STATIC_RUNTIME_WORKAROUND true)
+    endif()
+  endif()
+
+
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+    set( Boost_${UPPERCOMPONENT}_LIBRARY "Boost_${UPPERCOMPONENT}_LIBRARY-NOTFOUND" )
+    set( Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE-NOTFOUND" )
+    set( Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG-NOTFOUND")
+
+    set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
+    set( _boost_docstring_debug   "Boost ${COMPONENT} library (debug)")
+
+    #
+    # Find RELEASE libraries
+    #
+    set(_boost_RELEASE_NAMES
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT} )
+    if(_boost_STATIC_RUNTIME_WORKAROUND)
+      set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}")
+      list(APPEND _boost_RELEASE_NAMES
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
+    endif()
+    if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
+       _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES})
+    endif()
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
+    endif()
+    find_library(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE
+        NAMES ${_boost_RELEASE_NAMES}
+        HINTS ${_boost_LIBRARY_SEARCH_DIRS}
+        ${_boost_FIND_OPTIONS}
+        DOC "${_boost_docstring_release}"
+    )
+
+    #
+    # Find DEBUG libraries
+    #
+    set(_boost_DEBUG_NAMES
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}
+      ${Boost_LIB_PREFIX}boost_${COMPONENT} )
+    if(_boost_STATIC_RUNTIME_WORKAROUND)
+      set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}")
+      list(APPEND _boost_DEBUG_NAMES
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
+    endif()
+    if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
+       _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES})
+    endif()
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                     "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
+    endif()
+    find_library(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG
+        NAMES ${_boost_DEBUG_NAMES}
+        HINTS ${_boost_LIBRARY_SEARCH_DIRS}
+        ${_boost_FIND_OPTIONS}
+        DOC "${_boost_docstring_debug}"
+    )
+
+    if(Boost_REALPATH)
+      _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}")
+      _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG   "${_boost_docstring_debug}"  )
+    endif()
+
+    _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT})
+
+  endforeach(COMPONENT)
+
+  # Restore the original find library ordering
+  if( Boost_USE_STATIC_LIBS )
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+  endif()
+  # ------------------------------------------------------------------------
+  #  End finding boost libraries
+  # ------------------------------------------------------------------------
+
+  SET(Boost_INCLUDE_DIRS
+    ${Boost_INCLUDE_DIR}
+  )
+
+  SET(Boost_FOUND FALSE)
+  IF(Boost_INCLUDE_DIR)
+    SET( Boost_FOUND TRUE )
+
+    # Check the version of Boost against the requested version.
+    if (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
+      message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34")
+    endif (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
+    if(Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" )
+      set( Boost_FOUND FALSE )
+      set(_Boost_VERSION_AGE "old")
+    elseif(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" )
+      if(Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" )
+        set( Boost_FOUND FALSE )
+        set(_Boost_VERSION_AGE "old")
+      elseif(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" )
+        if( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" )
+          set( Boost_FOUND FALSE )
+          set(_Boost_VERSION_AGE "old")
+        endif( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" )
+      endif( Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" )
+    endif( Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" )
+
+    if (NOT Boost_FOUND)
+      _Boost_MARK_COMPONENTS_FOUND(OFF)
+    endif()
+
+    if (Boost_FOUND AND Boost_FIND_VERSION_EXACT)
+      # If the user requested an exact version of Boost, check
+      # that. We already know that the Boost version we have is >= the
+      # requested version.
+      set(_Boost_VERSION_AGE "new")
+
+      # If the user didn't specify a patchlevel, it's 0.
+      if (NOT Boost_FIND_VERSION_PATCH)
+        set(Boost_FIND_VERSION_PATCH 0)
+      endif (NOT Boost_FIND_VERSION_PATCH)
+
+      # We'll set Boost_FOUND true again if we have an exact version match.
+      set(Boost_FOUND FALSE)
+      _Boost_MARK_COMPONENTS_FOUND(OFF)
+      if(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" )
+        if(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" )
+          if(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" )
+            set( Boost_FOUND TRUE )
+            _Boost_MARK_COMPONENTS_FOUND(ON)
+          endif(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" )
+        endif( Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" )
+      endif( Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" )
+    endif (Boost_FOUND AND Boost_FIND_VERSION_EXACT)
+
+    if(NOT Boost_FOUND)
+      # State that we found a version of Boost that is too new or too old.
+      set(Boost_ERROR_REASON
+        "${Boost_ERROR_REASON}\nDetected version of Boost is too ${_Boost_VERSION_AGE}. Requested version was ${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
+      if (Boost_FIND_VERSION_PATCH)
+        set(Boost_ERROR_REASON
+          "${Boost_ERROR_REASON}.${Boost_FIND_VERSION_PATCH}")
+      endif (Boost_FIND_VERSION_PATCH)
+      if (NOT Boost_FIND_VERSION_EXACT)
+        set(Boost_ERROR_REASON "${Boost_ERROR_REASON} (or newer)")
+      endif (NOT Boost_FIND_VERSION_EXACT)
+      set(Boost_ERROR_REASON "${Boost_ERROR_REASON}.")
+    endif (NOT Boost_FOUND)
+
+    # Always check for missing components
+    set(_boost_CHECKED_COMPONENT FALSE)
+    set(_Boost_MISSING_COMPONENTS "")
+    foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+      string(TOUPPER ${COMPONENT} COMPONENT)
+      set(_boost_CHECKED_COMPONENT TRUE)
+      if(NOT Boost_${COMPONENT}_FOUND)
+        string(TOLOWER ${COMPONENT} COMPONENT)
+        list(APPEND _Boost_MISSING_COMPONENTS ${COMPONENT})
+        set( Boost_FOUND FALSE)
+      endif(NOT Boost_${COMPONENT}_FOUND)
+    endforeach(COMPONENT)
+
+    if(Boost_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] Boost_FOUND = ${Boost_FOUND}")
+    endif()
+
+    if (_Boost_MISSING_COMPONENTS)
+      # We were unable to find some libraries, so generate a sensible
+      # error message that lists the libraries we were unable to find.
+      set(Boost_ERROR_REASON
+        "${Boost_ERROR_REASON}\nThe following Boost libraries could not be found:\n")
+      foreach(COMPONENT ${_Boost_MISSING_COMPONENTS})
+        set(Boost_ERROR_REASON
+          "${Boost_ERROR_REASON}        boost_${COMPONENT}\n")
+      endforeach(COMPONENT)
+
+      list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED)
+      list(LENGTH _Boost_MISSING_COMPONENTS Boost_NUM_MISSING_COMPONENTS)
+      if (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
+        set(Boost_ERROR_REASON
+          "${Boost_ERROR_REASON}No Boost libraries were found. You may need to set Boost_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.")
+      else (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
+        set(Boost_ERROR_REASON
+          "${Boost_ERROR_REASON}Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set Boost_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.")
+      endif (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS})
+    endif (_Boost_MISSING_COMPONENTS)
+
+    IF( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT )
+      # Compatibility Code for backwards compatibility with CMake
+      # 2.4's FindBoost module.
+
+      # Look for the boost library path.
+      # Note that the user may not have installed any libraries
+      # so it is quite possible the Boost_LIBRARY_PATH may not exist.
+      SET(_boost_LIB_DIR ${Boost_INCLUDE_DIR})
+
+      IF("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
+        GET_FILENAME_COMPONENT(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
+      ENDIF ("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
+
+      IF("${_boost_LIB_DIR}" MATCHES "/include$")
+        # Strip off the trailing "/include" in the path.
+        GET_FILENAME_COMPONENT(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
+      ENDIF("${_boost_LIB_DIR}" MATCHES "/include$")
+
+      IF(EXISTS "${_boost_LIB_DIR}/lib")
+        SET (_boost_LIB_DIR ${_boost_LIB_DIR}/lib)
+      ELSE(EXISTS "${_boost_LIB_DIR}/lib")
+        IF(EXISTS "${_boost_LIB_DIR}/stage/lib")
+          SET(_boost_LIB_DIR ${_boost_LIB_DIR}/stage/lib)
+        ELSE(EXISTS "${_boost_LIB_DIR}/stage/lib")
+          SET(_boost_LIB_DIR "")
+        ENDIF(EXISTS "${_boost_LIB_DIR}/stage/lib")
+      ENDIF(EXISTS "${_boost_LIB_DIR}/lib")
+
+      IF(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
+        SET(Boost_LIBRARY_DIRS ${_boost_LIB_DIR} CACHE FILEPATH "Boost library directory")
+      ENDIF(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
+
+    ENDIF( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT )
+
+  ELSE(Boost_INCLUDE_DIR)
+    SET( Boost_FOUND FALSE)
+  ENDIF(Boost_INCLUDE_DIR)
+
+  IF (Boost_FOUND)
+      IF (NOT Boost_FIND_QUIETLY)
+        MESSAGE(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}")
+        if(Boost_FIND_COMPONENTS)
+          message(STATUS "Found the following Boost libraries:")
+        endif()
+      ENDIF(NOT Boost_FIND_QUIETLY)
+      FOREACH ( COMPONENT  ${Boost_FIND_COMPONENTS} )
+        STRING( TOUPPER ${COMPONENT} UPPERCOMPONENT )
+        IF ( Boost_${UPPERCOMPONENT}_FOUND )
+          IF (NOT Boost_FIND_QUIETLY)
+            MESSAGE (STATUS "  ${COMPONENT}")
+          ENDIF(NOT Boost_FIND_QUIETLY)
+          SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${UPPERCOMPONENT}_LIBRARY})
+        ENDIF ( Boost_${UPPERCOMPONENT}_FOUND )
+      ENDFOREACH(COMPONENT)
+  else()
+    if(Boost_FIND_REQUIRED)
+      message(SEND_ERROR "Unable to find the requested Boost libraries.\n${Boost_ERROR_REASON}")
+    else()
+      if(NOT Boost_FIND_QUIETLY)
+        # we opt not to automatically output Boost_ERROR_REASON here as
+        # it could be quite lengthy and somewhat imposing in it's requests
+        # Since Boost is not always a required dependency we'll leave this
+        # up to the end-user.
+        if(Boost_DEBUG OR Boost_DETAILED_FAILURE_MSG)
+          message(STATUS "Could NOT find Boost\n${Boost_ERROR_REASON}")
+        else()
+          message(STATUS "Could NOT find Boost")
+        endif()
+      endif()
+    endif(Boost_FIND_REQUIRED)
+  endif()
+
+  # show the Boost_INCLUDE_DIRS AND Boost_LIBRARIES variables only in the advanced view
+  MARK_AS_ADVANCED(Boost_INCLUDE_DIR
+      Boost_INCLUDE_DIRS
+      Boost_LIBRARY_DIRS
+  )
+ENDIF(_boost_IN_CACHE)
diff --git a/cmake-2.9.0-modules/RequireOutOfSourceBuild.cmake b/cmake-2.9.0-modules/RequireOutOfSourceBuild.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9b27970b500cecfa730dbb82fc8da90c62f12117
--- /dev/null
+++ b/cmake-2.9.0-modules/RequireOutOfSourceBuild.cmake
@@ -0,0 +1,44 @@
+# - Issue an error if the source tree is in or equal to the build tree
+#
+#  include(RequireOutOfSourceBuild)
+#
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+get_filename_component(_src "${CMAKE_SOURCE_DIR}" ABSOLUTE)
+get_filename_component(_cur_src "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE)
+get_filename_component(_bin "${CMAKE_BINARY_DIR}" ABSOLUTE)
+
+string(LENGTH "${_src}" _src_len)
+string(LENGTH "${_cur_src}" _cur_src_len)
+string(LENGTH "${_bin}" _bin_len)
+
+set(_test)
+
+if(NOT "${_bin_len}" GREATER "${_src_len}")
+	list(APPEND _test _src)
+	#message(STATUS "Checking ${_src}")
+endif()
+
+if(NOT "${_bin_len}" GREATER "${_cur_src_len}")
+	list(APPEND _test _cur_src)
+	#message(STATUS "Checking ${_cur_src}")
+endif()
+
+foreach(_var ${_test})
+	string(SUBSTRING "${${_var}}" 0 ${_bin_len} _chopped)
+	#message(STATUS "comparing ${_bin} and ${_chopped}")
+	if("${_bin}" STREQUAL "${_chopped}")
+		get_filename_component(_parent "${CMAKE_SOURCE_DIR}/.." ABSOLUTE)
+		message(FATAL_ERROR
+			"You must set a binary directory that is different from your source directory.  You might consider ${CMAKE_SOURCE_DIR}/build or ${_parent}/build-${CMAKE_PROJECT_NAME}")
+	endif()
+endforeach()
diff --git a/cmake-2.9.0-modules/autoinclude.cmake b/cmake-2.9.0-modules/autoinclude.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e9206ee08a3a82b97d10fd822d5b43e688f1b10d
--- /dev/null
+++ b/cmake-2.9.0-modules/autoinclude.cmake
@@ -0,0 +1,13 @@
+# - Autoinclude these policies automatically
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+include(RequireOutOfSourceBuild)
diff --git a/module-docs/Example-FindMyPackage.cmake b/module-docs/Example-FindMyPackage.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..cdf3bfcadc053dbdbe661514975efb953aea323e
--- /dev/null
+++ b/module-docs/Example-FindMyPackage.cmake
@@ -0,0 +1,189 @@
+# - try to find MyPackage library
+#
+# Example-FindMyPackage.cmake
+#
+# This example is for a fairly in-depth library that has four
+# internal dependencies as well as an external dependency.
+# The dependency tree is described below, in graphviz/dot format, and you
+# can remove the #'s from the following lines and run it through graphviz,
+# with this command: dot dependencies.dot -O -Tpdf
+#
+# --- start of dependencies.dot ---
+# digraph {
+#	BLAS;
+#	subgraph cluster_mypackage {
+#		label = "Components that are part of MyPackage";
+#		libmypackagecore -> libmypackagea;
+#		libmypackagea -> libmypackageb;
+#		libmypackageb -> libmypackagec;
+#		libmypackagec -> BLAS;
+#	}
+# }
+# --- end of dependencies.dot ---
+#
+# Because our imaginary component "c" requires BLAS and BLAS needs some
+# linker flags, MYPACKAGE_..._LINKER_FLAGS joins the usual group of
+# _LIBRARY/_LIBRARIES and _INCLUDE_DIR/_INCLUDE_DIRS variables.  If
+# you don't use a library like that, you don't need to include the
+# lines dealing with that group of variables.
+#
+# Most library aren't nearly this complex - but some are, and many
+# have some parts of the complexity handled here.
+#
+# Start of what would be a minimal module documentation block:
+#
+# Cache Variables: (not for direct use in CMakeLists.txt)
+#  MYPACKAGE_ROOT
+#  MYPACKAGE_LIBRARY
+#  MYPACKAGE_INCLUDE_DIR
+#  MYPACKAGE_a_LIBRARY
+#  MYPACKAGE_a_INCLUDE_DIR
+#  MYPACKAGE_b_LIBRARY
+#  MYPACKAGE_b_INCLUDE_DIR
+#  MYPACKAGE_c_LIBRARY
+#  MYPACKAGE_c_INCLUDE_DIR
+#
+# Non-cache variables you might use in your CMakeLists.txt:
+#  MYPACKAGE_FOUND
+#
+#  MYPACKAGE_LIBRARIES
+#  MYPACKAGE_INCLUDE_DIRS
+#  MYPACKAGE_LINKER_FLAGS
+#
+#  MYPACKAGE_a_LIBRARIES
+#  MYPACKAGE_a_INCLUDE_DIRS
+#  MYPACKAGE_a_LINKER_FLAGS
+#
+#  MYPACKAGE_b_LIBRARIES
+#  MYPACKAGE_b_INCLUDE_DIRS
+#  MYPACKAGE_b_LINKER_FLAGS
+#
+#  MYPACKAGE_c_LIBRARIES
+#  MYPACKAGE_c_INCLUDE_DIRS
+#  MYPACKAGE_c_LINKER_FLAGS
+#
+# Use this module this way:
+#  find_package(MyPackage)
+#  include_directories(${MYPACKAGE_INCLUDE_DIRS})
+#  add_executable(myapp ${SOURCES})
+#  target_link_libraries(myapp ${MYPACKAGE_LIBRARIES})
+#  set_property(TARGET myapp PROPERTY LINK_FLAGS ${MYPACKAGE_LINKER_FLAGS})
+#
+# Requires these CMake modules:
+#  FindPackageHandleStandardArgs (CMake standard module)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+
+set(MYPACKAGE_ROOT
+	"${MYPACKAGE_ROOT}"
+	CACHE
+	PATH
+	"Root directory to look in")
+
+find_library(MYPACKAGE_LIBRARY
+	NAMES
+	mypackagecore
+	PATHS
+	"${MYPACKAGE_ROOT}"
+	PATH_SUFFIXES
+	lib)
+
+find_path(MYPACKAGE_INCLUDE_DIR
+	NAMES
+	mypackage/mypackage.h
+	PATHS
+	"${MYPACKAGE_ROOT}"
+	PATH_SUFFIXES
+	include)
+
+# Assuming that the components are named libmypackagea, libmypackageb, etc
+foreach(lib a b c)
+	find_library(MYPACKAGE_${lib}_LIBRARY
+		NAMES
+		mypackage${lib}
+		PATHS
+		"${MYPACKAGE_ROOT}"
+		PATH_SUFFIXES
+		lib)
+
+	find_path(MYPACKAGE_${lib}_INCLUDE_DIR
+		NAMES
+		mypackage/${lib}/${lib}.h
+		PATHS
+		"${MYPACKAGE_ROOT}"
+		PATH_SUFFIXES
+		include)
+
+endforeach()
+
+# Searching for dependencies here - always quiet.
+# see /usr/share/cmake-2.x/Modules/FindBLAS.cmake for the variables this will define
+if(NOT BLAS_FOUND)
+	find_package(BLAS QUIETLY)
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MyPackage
+	DEFAULT_MSG
+	MYPACKAGE_LIBRARY
+	MYPACKAGE_INCLUDE_DIR
+	MYPACKAGE_a_LIBRARY
+	MYPACKAGE_a_INCLUDE_DIR
+	MYPACKAGE_b_LIBRARY
+	MYPACKAGE_b_INCLUDE_DIR
+	MYPACKAGE_c_LIBRARY
+	MYPACKAGE_c_INCLUDE_DIR
+	BLAS_FOUND)
+
+if(MYPACKAGE_FOUND)
+	# Set variables containing libraries and their dependencies
+	# Always use the plural form for the variables defined by other find modules:
+	# they might have dependencies too!
+
+	set(MYPACKAGE_c_LIBRARIES ${MYPACKAGE_c_LIBRARY} ${BLAS_LIBRARIES})
+	set(MYPACKAGE_c_INCLUDE_DIRS ${MYPACKAGE_c_INCLUDE_DIR})	# No include dir for BLAS?
+	set(MYPACKAGE_c_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
+
+	set(MYPACKAGE_b_LIBRARIES
+		${MYPACKAGE_b_LIBRARY}
+		${MYPACKAGE_c_LIBRARIES})
+	set(MYPACKAGE_b_INCLUDE_DIRS
+		${MYPACKAGE_b_INCLUDE_DIR}
+		${MYPACKAGE_c_INCLUDE_DIRS})
+	set(MYPACKAGE_b_LINKER_FLAGS ${MYPACKAGE_c_LINKER_FLAGS})
+
+	set(MYPACKAGE_a_LIBRARIES
+		${MYPACKAGE_a_LIBRARY}
+		${MYPACKAGE_b_LIBRARIES})
+	set(MYPACKAGE_a_INCLUDE_DIRS
+		${MYPACKAGE_a_INCLUDE_DIR}
+		${MYPACKAGE_b_INCLUDE_DIRS})
+	set(MYPACKAGE_a_LINKER_FLAGS ${MYPACKAGE_b_LINKER_FLAGS})
+
+	set(MYPACKAGE_LIBRARIES ${MYPACKAGE_LIBRARY} ${MYPACKAGE_a_LIBRARIES})
+	set(MYPACKAGE_INCLUDE_DIRS
+		${MYPACKAGE_INCLUDE_DIR}
+		${MYPACKAGE_a_INCLUDE_DIRS})
+	set(MYPACKAGE_LINKER_FLAGS ${MYPACKAGE_a_LINKER_FLAGS})
+
+endif()
+
+mark_as_advanced(MYPACKAGE_LIBRARY
+	MYPACKAGE_INCLUDE_DIR
+	MYPACKAGE_a_LIBRARY
+	MYPACKAGE_a_INCLUDE_DIR
+	MYPACKAGE_b_LIBRARY
+	MYPACKAGE_b_INCLUDE_DIR
+	MYPACKAGE_c_LIBRARY
+	MYPACKAGE_c_INCLUDE_DIR)
+
+if(MYPACKAGE_FOUND)
+	mark_as_advanced(MYPACKAGE_ROOT)
+endif()
+
+# End of Example-FindMyPackage.cmake
diff --git a/module-docs/Example-FindMySimplePackage.cmake b/module-docs/Example-FindMySimplePackage.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..678b8684e620f029aada5720fd0256e3cb0d5fc7
--- /dev/null
+++ b/module-docs/Example-FindMySimplePackage.cmake
@@ -0,0 +1,101 @@
+# - try to find MySimplePackage library
+#
+# Example-MySimplePackage.cmake
+#
+# This example is for a pretty simple library but that is still fairly
+# common in its complexity.
+#
+# Cache Variables: (probably not for direct use in your scripts)
+#  MYSIMPLEPACKAGE_INCLUDE_DIR
+#  MYSIMPLEPACKAGE_LIBRARY
+#
+# Non-cache variables you might use in your CMakeLists.txt:
+#  MYSIMPLEPACKAGE_FOUND
+#  MYSIMPLEPACKAGE_INCLUDE_DIRS
+#  MYSIMPLEPACKAGE_LIBRARIES
+#  MYSIMPLEPACKAGE_RUNTIME_LIBRARIES - aka the dll for installing
+#  MYSIMPLEPACKAGE_RUNTIME_LIBRARY_DIRS
+#
+# Requires these CMake modules:
+#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(MYSIMPLEPACKAGE_ROOT_DIR
+	"${MYSIMPLEPACKAGE_ROOT_DIR}"
+	CACHE
+	PATH
+	"Directory to search")
+
+if(CMAKE_SIZEOF_VOID_P MATCHES "8")
+	set(_LIBSUFFIXES /lib64 /lib)
+else()
+	set(_LIBSUFFIXES /lib)
+endif()
+
+find_library(MYSIMPLEPACKAGE_LIBRARY
+	NAMES
+	mysimplepackage
+	PATHS
+	"${MYSIMPLEPACKAGE_ROOT_DIR}"
+	PATH_SUFFIXES
+	"${_LIBSUFFIXES}")
+
+# Might want to look close to the library first for the includes.
+get_filename_component(_libdir "${MYSIMPLEPACKAGE_LIBRARY}" PATH)
+
+find_path(MYSIMPLEPACKAGE_INCLUDE_DIR
+	NAMES
+	mysimplepackage.h
+	HINTS
+	"${_libdir}" # the library I based this on was sometimes bundled right next to its include
+	"${_libdir}/.."
+	PATHS
+	"${MYSIMPLEPACKAGE_ROOT_DIR}"
+	PATH_SUFFIXES
+	include/)
+
+# There's a DLL to distribute on Windows - find where it is.
+set(_deps_check)
+if(WIN32)
+	find_file(MYSIMPLEPACKAGE_RUNTIME_LIBRARY
+		NAMES
+		mysimplepackage.dll
+		HINTS
+		"${_libdir}")
+	set(MYSIMPLEPACKAGE_RUNTIME_LIBRARIES
+		"${MYSIMPLEPACKAGE_RUNTIME_LIBRARY}")
+	get_filename_component(MYSIMPLEPACKAGE_RUNTIME_LIBRARY_DIRS
+		"${MYSIMPLEPACKAGE_RUNTIME_LIBRARY}"
+		PATH)
+	list(APPEND _deps_check MYSIMPLEPACKAGE_RUNTIME_LIBRARY)
+else()
+	get_filename_component(MYSIMPLEPACKAGE_RUNTIME_LIBRARY_DIRS
+		"${MYSIMPLEPACKAGE_LIBRARY}"
+		PATH)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MySimplePackage
+	DEFAULT_MSG
+	MYSIMPLEPACKAGE_LIBRARY
+	MYSIMPLEPACKAGE_INCLUDE_DIR
+	${_deps_check})
+
+if(MYSIMPLEPACKAGE_FOUND)
+	set(MYSIMPLEPACKAGE_LIBRARIES "${MYSIMPLEPACKAGE_LIBRARY}")
+	set(MYSIMPLEPACKAGE_INCLUDE_DIRS "${MYSIMPLEPACKAGE_INCLUDE_DIR}")
+	mark_as_advanced(MYSIMPLEPACKAGE_ROOT_DIR)
+endif()
+
+mark_as_advanced(MYSIMPLEPACKAGE_INCLUDE_DIR
+	MYSIMPLEPACKAGE_LIBRARY
+	MYSIMPLEPACKAGE_RUNTIME_LIBRARY)
diff --git a/package-licensing/Boost.cmake b/package-licensing/Boost.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..22e7d86ee31947beceefdde935138dd0c2316d89
--- /dev/null
+++ b/package-licensing/Boost.cmake
@@ -0,0 +1,13 @@
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+add_permissive_license(Boost
+	"Based in part on the work of the Boost project. Boost is distributed under the Boost Software License, Version 1.0. See copy at http://www.boost.org/LICENSE_1_0.txt"
+	"<http://www.boost.org>")
diff --git a/package-licensing/Eigen.cmake b/package-licensing/Eigen.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..538d787ed146f4ca73fa86cd1046f7c67cb16d8d
--- /dev/null
+++ b/package-licensing/Eigen.cmake
@@ -0,0 +1,13 @@
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+add_permissive_license(Eigen
+	"Based in part on the work of the Eigen project. Eigen is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.\nEigen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details."
+	"<http://eigen.tuxfamily.org>")
diff --git a/package-licensing/Qt-LGPL.cmake b/package-licensing/Qt-LGPL.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..db4d78d32b794a18b4d825bf36058da8b46533ee
--- /dev/null
+++ b/package-licensing/Qt-LGPL.cmake
@@ -0,0 +1,13 @@
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file ../LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+add_permissive_license(Qt
+	"Based in part on the work of the Qt GUI Toolkit project. The Qt GUI Toolkit is Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). You may use, distribute and copy the Qt GUI Toolkit under the terms of GNU Lesser General Public License version 2.1, as published by the Free Software Foundation."
+	"<http://qt.nokia.com/>")