Use canonical install path for binary .so libraries
Since both librellis.so and pytrellis.so are binary,
architecture-specific libraries, they belong in /usr/lib64
on 64-bit architectures.
Also, since they are not versioned, and meant for use only
by binaries shipped as part of prjtrellis, they should be
installed as private libraries into a package-specific,
/usr/lib[64]/[prj]trellis/ directory (For details, see
fedoraproject.org/wiki/Common_Rpmlint_issues#invalid-soname)
with an appropriately configured rpath.
Signed-off-by: Gabriel Somlo <gsomlo@gmail.com>
diff --git a/libtrellis/CMakeLists.txt b/libtrellis/CMakeLists.txt
index 4f3edb9..d95283a 100644
--- a/libtrellis/CMakeLists.txt
+++ b/libtrellis/CMakeLists.txt
@@ -108,16 +108,23 @@
find_package(Boost REQUIRED COMPONENTS program_options)
+get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
+if ("${LIB64}" STREQUAL "TRUE")
+ set(LIBDIR "lib64")
+else()
+ set(LIBDIR "lib")
+endif()
+
function(setup_rpath name)
if(APPLE)
set_target_properties(${name} PROPERTIES
BUILD_WITH_INSTALL_RPATH ON
- INSTALL_RPATH "@loader_path/../lib"
+ INSTALL_RPATH "@loader_path/../${LIBDIR}/trellis"
INSTALL_NAME_DIR "@rpath")
elseif(UNIX)
set_target_properties(${name} PROPERTIES
BUILD_WITH_INSTALL_RPATH ON
- INSTALL_RPATH "\$ORIGIN/../lib")
+ INSTALL_RPATH "\$ORIGIN/../${LIBDIR}/trellis")
endif()
endfunction()
@@ -137,7 +144,7 @@
setup_rpath(ecppll)
if (BUILD_SHARED)
- install(TARGETS trellis ecppack ecppll ecpunpack LIBRARY DESTINATION lib RUNTIME DESTINATION bin)
+ install(TARGETS trellis ecppack ecppll ecpunpack LIBRARY DESTINATION ${LIBDIR}/trellis RUNTIME DESTINATION bin)
else()
install(TARGETS ecppack ecpunpack ecppll RUNTIME DESTINATION bin)
endif()
@@ -146,5 +153,5 @@
install(DIRECTORY ../util/common DESTINATION share/trellis/util)
install(DIRECTORY ../timing/util DESTINATION share/trellis/timing)
if (BUILD_SHARED)
- install(TARGETS pytrellis DESTINATION share/trellis/libtrellis)
+ install(TARGETS pytrellis DESTINATION ${LIBDIR}/trellis)
endif()