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})