Add support for the CMake "LIB_SUFFIX" convention

Allows `make install` to work correctly on e.g. 64-bit systems where the
native libraries are installed to /usr/lib64

Change-Id: I71b4fae7b459c003cb5fac981278c668f2e29779
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 43e251a..5440713 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -99,6 +99,18 @@
     wall_time.cc
 )
 
+# Heuristic for determining LIB_SUFFIX. FHS recommends that 64-bit systems
+# install native libraries to lib64 rather than lib. Most distros seem to
+# follow this convention with a couple notable exceptions (Debian-based and
+# Arch-based distros) which we try to detect here.
+IF (NOT DEFINED LIB_SUFFIX AND
+    NOT CMAKE_CROSSCOMPILING AND
+    ${CMAKE_SIZEOF_VOID_P} EQUAL "8" AND
+    NOT EXISTS "/etc/debian_version" AND
+    NOT EXISTS "/etc/arch-release")
+  SET(LIB_SUFFIX "64")
+ENDIF()
+
 If (${PROTOBUF_FOUND})
   PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS matrix.proto)
 ENDIF (${PROTOBUF_FOUND})
@@ -125,8 +137,8 @@
 
   INSTALL(TARGETS miniglog
           RUNTIME DESTINATION bin
-          LIBRARY DESTINATION lib
-          ARCHIVE DESTINATION lib)
+          LIBRARY DESTINATION lib${LIB_SUFFIX}
+          ARCHIVE DESTINATION lib${LIB_SUFFIX})
 ENDIF (${BUILD_ANDROID})
 
 SET(CERES_LIBRARY_DEPENDENCIES ${GLOG_LIB})
@@ -182,8 +194,8 @@
 
 INSTALL(TARGETS ceres
         RUNTIME DESTINATION bin
-        LIBRARY DESTINATION lib
-        ARCHIVE DESTINATION lib)
+        LIBRARY DESTINATION lib${LIB_SUFFIX}
+        ARCHIVE DESTINATION lib${LIB_SUFFIX})
 
 # Don't build a DLL on MSVC. Supporting Ceres as a DLL on Windows involves
 # nontrivial changes that we haven't made yet.
@@ -196,8 +208,8 @@
 
   INSTALL(TARGETS ceres_shared
           RUNTIME DESTINATION bin
-          LIBRARY DESTINATION lib
-          ARCHIVE DESTINATION lib)
+          LIBRARY DESTINATION lib${LIB_SUFFIX}
+          ARCHIVE DESTINATION lib${LIB_SUFFIX})
 
 ENDIF (NOT MSVC AND NOT ${BUILD_ANDROID})