libtrellis/CMakeLists.txt: Use GNUInstallDirs to determine install paths

Use the GNUInstallDirs include provided by CMake to auto detect target
install paths for the target system. This allows for building natively
on the same host as well as enabling a distro to override the paths or
for cross compiling to override the paths for the target distro/system.

This removes the need to manually detect the 'lib64' directory, and also
fixes the issues with using 'FIND_LIBRARY_USE_LIB64_PATHS' which is
always true on targets other than debian (even if those targets do not
use the 'lib64' path by default).

Additionally this change calculates the relative path between bindir and
libdir in order to populate the rpath information into the built
binaries for supporting portable execution.

Signed-off-by: Nathan Rossi <nathan@nathanrossi.com>
diff --git a/libtrellis/CMakeLists.txt b/libtrellis/CMakeLists.txt
index dc49445..267bd58 100644
--- a/libtrellis/CMakeLists.txt
+++ b/libtrellis/CMakeLists.txt
@@ -108,23 +108,20 @@
 
 find_package(Boost REQUIRED COMPONENTS program_options)
 
-get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
-if (NOT APPLE AND "${LIB64}" STREQUAL "TRUE")
-    set(LIBDIR "lib64")
-else()
-    set(LIBDIR "lib")
-endif()
+include(GNUInstallDirs)
+
+file(RELATIVE_PATH TRELLIS_RPATH_LIBDIR /${CMAKE_INSTALL_BINDIR} /${CMAKE_INSTALL_LIBDIR})
 
 function(setup_rpath name)
     if(APPLE)
         set_target_properties(${name} PROPERTIES
                               BUILD_WITH_INSTALL_RPATH ON
-                              INSTALL_RPATH "@loader_path/../${LIBDIR}/trellis"
+                              INSTALL_RPATH "@loader_path/${TRELLIS_RPATH_LIBDIR}/trellis"
                               INSTALL_NAME_DIR "@rpath")
     elseif(UNIX)
         set_target_properties(${name} PROPERTIES
                               BUILD_WITH_INSTALL_RPATH ON
-                              INSTALL_RPATH "\$ORIGIN/../${LIBDIR}/trellis")
+                              INSTALL_RPATH "\$ORIGIN/${TRELLIS_RPATH_LIBDIR}/trellis")
     endif()
 endfunction()
 
@@ -149,11 +146,14 @@
 setup_rpath(ecpmulti)
 
 if (BUILD_SHARED)
-    install(TARGETS trellis ecppack ecppll ecpunpack ecpmulti pytrellis LIBRARY DESTINATION ${LIBDIR}/trellis  RUNTIME DESTINATION bin)
+    install(TARGETS trellis ecppack ecppll ecpunpack ecpmulti pytrellis
+            LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/trellis
+            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 else()
-    install(TARGETS ecppack ecpunpack ecppll ecpmulti RUNTIME DESTINATION bin)
+    install(TARGETS ecppack ecpunpack ecppll ecpmulti
+            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 endif()
-install(DIRECTORY ../database DESTINATION share/trellis PATTERN ".git" EXCLUDE)
-install(DIRECTORY ../misc DESTINATION share/trellis)
-install(DIRECTORY ../util/common DESTINATION share/trellis/util)
-install(DIRECTORY ../timing/util DESTINATION share/trellis/timing USE_SOURCE_PERMISSIONS)
+install(DIRECTORY ../database DESTINATION ${CMAKE_INSTALL_DATADIR}/trellis PATTERN ".git" EXCLUDE)
+install(DIRECTORY ../misc DESTINATION ${CMAKE_INSTALL_DATADIR}/trellis)
+install(DIRECTORY ../util/common DESTINATION ${CMAKE_INSTALL_DATADIR}/trellis/util)
+install(DIRECTORY ../timing/util DESTINATION ${CMAKE_INSTALL_DATADIR}/trellis/timing USE_SOURCE_PERMISSIONS)