COMP: Add CMake build system
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..458ce35
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,89 @@
+cmake_minimum_required(VERSION 2.8)
+project(double-conversion)
+
+# pick a version #
+set(double-conversion_VERSION
+  1.0.0)
+
+# set paths for install -- empty initially
+set(INSTALL_BIN_DIR CACHE PATH "Installation directory for libraries")
+set(INSTALL_LIB_DIR CACHE PATH "Installation directory for libraries")
+set(INSTALL_INCLUDE_DIR CACHE PATH "Installation directory for include")
+# set suffix for CMake files used for packaging
+if(WIN32 AND NOT CYGWIN)
+  set(INSTALL_CMAKE_DIR CMake)
+else()
+  set(INSTALL_CMAKE_DIR lib/CMake/double-conversion)
+endif()
+
+#
+# set defaults for install paths
+foreach(p LIB BIN INCLUDE CMAKE)
+  set(var INSTALL_${p}_DIR)
+  if(NOT IS_ABSOLUTE "${${var}}")
+    set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
+  endif()
+endforeach()
+
+#
+# set up include dirs
+include_directories("${PROJECT_SOURCE_DIR}/src"
+  "${PROJECT_BINARY_DIR}"
+  )
+
+# Add src subdirectory
+add_subdirectory(src)
+
+#
+# set up testing if requested
+option(BUILD_TESTING "Build test programs" OFF)
+if(BUILD_TESTING)
+  enable_testing()
+  include(CTest)
+  add_subdirectory(test)
+endif()
+
+#
+# mention the library target as export library
+export(TARGETS double-conversion
+  FILE "${PROJECT_BINARY_DIR}/double-conversionLibraryDepends.cmake")
+
+#
+# set this build as an importable package
+export(PACKAGE double-conversion)
+
+#
+# make a cmake file -- in this case, all that needs defining
+# is double-conversion_INCLUDE_DIRS
+configure_file(double-conversionBuildTreeSettings.cmake.in
+  "${PROJECT_BINARY_DIR}/double-conversionBuildTreeSettings.cmake"
+  @ONLY)
+
+#
+# determine where include is relative to the CMake dir in
+# in installed tree
+file(RELATIVE_PATH CONF_REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}"
+  "${INSTALL_INCLUDE_DIR}")
+
+#
+# sets up config to be used by CMake find_package
+configure_file(double-conversionConfig.cmake.in
+  "${PROJECT_BINARY_DIR}/double-conversionConfig.cmake"
+  @ONLY)
+#
+# Export version # checked by find_package
+configure_file(double-conversionConfigVersion.cmake.in
+  "${PROJECT_BINARY_DIR}/double-conversionConfigVersion.cmake"
+  @ONLY)
+#
+# install config files for find_package
+install(FILES
+  "${PROJECT_BINARY_DIR}/double-conversionConfig.cmake"
+  "${PROJECT_BINARY_DIR}/double-conversionConfigVersion.cmake"
+  DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
+
+
+#
+# generates install cmake files to find libraries in installation.
+install(EXPORT double-conversionLibraryDepends DESTINATION
+  "${INSTALL_CMAKE_DIR}" COMPONENT dev)
diff --git a/double-conversionBuildTreeSettings.cmake.in b/double-conversionBuildTreeSettings.cmake.in
new file mode 100644
index 0000000..f46705d
--- /dev/null
+++ b/double-conversionBuildTreeSettings.cmake.in
@@ -0,0 +1,2 @@
+set(double-conversion_INCLUDE_DIRS
+  "@PROJECT_SOURCE_DIR@/src")
diff --git a/double-conversionConfig.cmake.in b/double-conversionConfig.cmake.in
new file mode 100644
index 0000000..bbe784b
--- /dev/null
+++ b/double-conversionConfig.cmake.in
@@ -0,0 +1,17 @@
+# - Config file for the double-conversion package
+# It defines the following variables
+# double-conversion_INCLUDE_DIRS
+# double-conversion_LIBRARIES
+
+get_filename_component(double-conversion_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+if(EXISTS "${double-conversion_CMAKE_DIR}/CMakeCache.txt")
+  include("${double-conversion_CMAKE_DIR}/double-conversionBuildTreeSettings.cmake")
+else()
+  set(double-conversion_INCLUDE_DIRS
+    "${double-conversion_CMAKE_DIR}/@CONF_REL_INCLUDE_DIR@/include/double-conversion")
+endif()
+
+include("${double-conversion_CMAKE_DIR}/double-conversionLibraryDepends.cmake")
+
+set(double-conversion_LIBRARIES double-conversion)
diff --git a/double-conversionConfigVersion.cmake.in b/double-conversionConfigVersion.cmake.in
new file mode 100644
index 0000000..0f2295d
--- /dev/null
+++ b/double-conversionConfigVersion.cmake.in
@@ -0,0 +1,11 @@
+set(PACKAGE_VERSION "@double-conversion_VERSION@")
+ 
+# Check whether the requested PACKAGE_FIND_VERSION is compatible
+if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+  set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+  set(PACKAGE_VERSION_COMPATIBLE TRUE)
+  if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
+    set(PACKAGE_VERSION_EXACT TRUE)
+  endif()
+endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..c03931d
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,42 @@
+
+set(headers
+  bignum.h
+  cached-powers.h
+  diy-fp.h
+  double-conversion.h
+  fast-dtoa.h
+  fixed-dtoa.h
+  ieee.h
+  strtod.h
+  utils.h
+  )
+
+add_library(double-conversion
+bignum.cc
+bignum-dtoa.cc
+cached-powers.cc
+diy-fp.cc
+double-conversion.cc
+fast-dtoa.cc
+fixed-dtoa.cc
+strtod.cc
+${headers}
+)
+
+#
+# associates the list of headers with the library
+# for the purposes of installation/import into other projects
+set_target_properties(double-conversion
+    PROPERTIES PUBLIC_HEADER "${headers}")
+
+#
+# install command to set up library install
+# given the above PUBLIC_HEADER property set, this
+# pulls along all the header files with the library.
+install(TARGETS double-conversion
+  EXPORT double-conversionLibraryDepends
+  RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin
+  LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT shlib
+  ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib
+  PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/include/double-conversion"
+  COMPONENT dev)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..3cf4449
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(cctest)
\ No newline at end of file
diff --git a/test/cctest/CMakeLists.txt b/test/cctest/CMakeLists.txt
new file mode 100644
index 0000000..cdb5538
--- /dev/null
+++ b/test/cctest/CMakeLists.txt
@@ -0,0 +1,50 @@
+
+set(CCTEST_SRC
+  cctest.cc
+  gay-fixed.cc
+  gay-precision.cc
+  gay-shortest.cc
+  gay-shortest-single.cc
+  test-bignum.cc
+  test-bignum-dtoa.cc
+  test-conversions.cc
+  test-diy-fp.cc
+  test-dtoa.cc
+  test-fast-dtoa.cc
+  test-fixed-dtoa.cc
+  test-ieee.cc
+  test-strtod.cc
+)
+
+add_executable(cctest ${CCTEST_SRC})
+target_link_libraries(cctest double-conversion)
+
+add_test(NAME test_bignum
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-bignum)
+
+add_test(NAME test_bignum_dtoa
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-bignum-dtoa)
+
+add_test(NAME test_conversions
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-conversions)
+add_test(NAME test_diy_fp
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-diy-fp)
+add_test(NAME test_dtoa
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-dtoa)
+add_test(NAME test_fast_dtoa
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-fast-dtoa)
+add_test(NAME test_fixed_dtoa
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-fixed-dtoa)
+add_test(NAME test_ieee
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-ieee)
+add_test(NAME test_strtod
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  COMMAND $<TARGET_FILE:cctest> test-strtod)