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)