From cb34603cce0a8814dc66f76ecc5ceeb04a8d3791 Mon Sep 17 00:00:00 2001
From: Jonathan Scruggs <j.scruggs@gmail.com>
Date: Fri, 18 Aug 2017 13:37:54 +0100
Subject: [PATCH] OpenShadingLanguage/RB-1.8: Change to GNUInstallDirs for
 install paths

The variables: BIN_INSTALL_DIR, LIB_INSTALL_DIR, INCLUDE_INSTALL_DIR,
DOC_INSTALL_DIR, and MAN_INSTALL_DIR are defined but never used.
Instead, hard coded paths to lib, include, and bin were used. This
will cause difficulty on multi-lib systems or in cases where they
are named differently. The existing variables were replaced by the
GNUInstallDirs variables, which is compatible on all systems.

The macro install_targets was defined, but never used in code,
so all library installs were changed to use it.
Thus all library installs now use GNUInstallDirs.

INSTALL_DOCS variable is defined, so it's now controlling if
the documentation is being installed.

Signed-off by: Jonathan Scruggs <j.scruggs@gmail.com>
---
 CMakeLists.txt                 | 66 +++++++++---------------------------------
 src/cmake/util_macros.cmake    |  6 ++--
 src/doc/CMakeLists.txt         |  6 ++--
 src/include/CMakeLists.txt     |  2 +-
 src/liboslcomp/CMakeLists.txt  |  2 +-
 src/liboslexec/CMakeLists.txt  |  2 +-
 src/liboslnoise/CMakeLists.txt |  2 +-
 src/liboslquery/CMakeLists.txt |  2 +-
 src/osl.imageio/CMakeLists.txt | 19 +-----------
 src/oslc/CMakeLists.txt        |  2 +-
 src/oslinfo/CMakeLists.txt     |  2 +-
 src/testrender/CMakeLists.txt  |  2 +-
 src/testshade/CMakeLists.txt   |  6 ++--
 13 files changed, 32 insertions(+), 87 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 305047c0..da4635ab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -248,6 +248,8 @@ set (OSL_BUILD_PLUGINS ON CACHE BOOL "Bool OSL plugins, for example OIIO plugin"
 set (USE_CCACHE ON CACHE BOOL "Use ccache if found")
 set (CODECOV OFF CACHE BOOL "Build code coverage tests")
 option (USE_BOOST_WAVE "Use Boost Wave for C preprocessor (alternative is to use clang)" OFF)
+set (PLUGIN_SEARCH_PATH "" CACHE STRING "Default plugin search path")
+set (INSTALL_DOCS ON CACHE BOOL "Install documentation")
 
 # Use ccache if found
 find_program (CCACHE_FOUND ccache)
@@ -349,6 +351,14 @@ if (OSL_NAMESPACE)
 endif ()
 message(STATUS "Setting Namespace to: ${OSL_NAMESPACE}")
 
+include (GNUInstallDirs)
+
+message (STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX}")
+message (STATUS "CMAKE_INSTALL_LIBDIR is ${CMAKE_INSTALL_LIBDIR}")
+message (STATUS "CMAKE_INSTALL_BINDIR is ${CMAKE_INSTALL_BINDIR}")
+message (STATUS "CMAKE_INSTALL_DOCDIR is ${CMAKE_INSTALL_DOCDIR}")
+message (STATUS "CMAKE_INSTALL_INCLUDEDIR is ${CMAKE_INSTALL_INCLUDEDIR}")
+
 set (CMAKE_MODULE_PATH
      "${PROJECT_SOURCE_DIR}/src/cmake/modules"
      "${PROJECT_SOURCE_DIR}/src/cmake")
@@ -363,58 +373,6 @@ include_directories (
   )
 
 
-###########################################################################
-# Paths for install tree customization.  Note that relative paths are relative
-# to CMAKE_INSTALL_PREFIX.
-set (DEFAULT_BIN_INSTALL_DIR   "bin")
-set (DEFAULT_LIB_INSTALL_DIR   "lib")
-set (DEFAULT_INCLUDE_INSTALL_DIR "include/OSL")
-if (UNIX AND NOT SELF_CONTAINED_INSTALL_TREE)
-    # Try to be well-behaved and install into reasonable places according to
-    # the "standard" unix directory heirarchy
-    # TODO: Figure out how to get the correct python directory
-    set (DEFAULT_PYLIB_INSTALL_DIR "lib/python/site-packages")
-    set (DEFAULT_PYLIB3_INSTALL_DIR "lib/python3/site-packages")
-    set (DEFAULT_DOC_INSTALL_DIR "share/doc/OSL")
-    set (DEFAULT_MAN_INSTALL_DIR "share/man/man1")
-else ()
-    # Here is the "self-contained install tree" case: the expectation here is
-    # that everything OSL related will go into its own directory, not into
-    # some standard system heirarchy.
-    set (DEFAULT_PYLIB_INSTALL_DIR "python")
-    set (DEFAULT_PYLIB3_INSTALL_DIR "python3")
-    set (DEFAULT_DOC_INSTALL_DIR "doc")
-    set (DEFAULT_MAN_INSTALL_DIR "doc/man")
-endif ()
-if (EXEC_INSTALL_PREFIX)
-    # Tack on an extra prefix to support multi-arch builds.
-    set (DEFAULT_BIN_INSTALL_DIR   "${EXEC_INSTALL_PREFIX}/${DEFAULT_BIN_INSTALL_DIR}")
-    set (DEFAULT_LIB_INSTALL_DIR   "${EXEC_INSTALL_PREFIX}/${DEFAULT_LIB_INSTALL_DIR}")
-    set (DEFAULT_PYLIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${DEFAULT_PYLIB_INSTALL_DIR}")
-    set (DEFAULT_PYLIB3_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${DEFAULT_PYLIB3_INSTALL_DIR}")
-endif ()
-# Set up cmake cache variables corresponding to the defaults deduced above, so
-# that the user can override them as desired:
-set (BIN_INSTALL_DIR ${DEFAULT_BIN_INSTALL_DIR} CACHE STRING
-     "Install location for binaries (relative to CMAKE_INSTALL_PREFIX or absolute)")
-set (LIB_INSTALL_DIR ${DEFAULT_LIB_INSTALL_DIR} CACHE STRING
-     "Install location for libraries (relative to CMAKE_INSTALL_PREFIX or absolute)")
-set (PYLIB_INSTALL_DIR ${DEFAULT_PYLIB_INSTALL_DIR} CACHE STRING
-     "Install location for python libraries (relative to CMAKE_INSTALL_PREFIX or absolute)")
-set (PYLIB3_INSTALL_DIR ${DEFAULT_PYLIB3_INSTALL_DIR} CACHE STRING
-     "Install location for python3 libraries (relative to CMAKE_INSTALL_PREFIX or absolute)")
-set (INCLUDE_INSTALL_DIR ${DEFAULT_INCLUDE_INSTALL_DIR} CACHE STRING
-     "Install location of header files (relative to CMAKE_INSTALL_PREFIX or absolute)")
-set (DOC_INSTALL_DIR ${DEFAULT_DOC_INSTALL_DIR} CACHE STRING
-     "Install location for documentation (relative to CMAKE_INSTALL_PREFIX or absolute)")
-if (UNIX)
-    set (MAN_INSTALL_DIR ${DEFAULT_MAN_INSTALL_DIR} CACHE STRING
-         "Install location for manual pages (relative to CMAKE_INSTALL_PREFIX or absolute)")
-endif()
-set (PLUGIN_SEARCH_PATH "" CACHE STRING "Default plugin search path")
-set (INSTALL_DOCS ON CACHE BOOL "Install documentation")
-
-
 if (APPLE)
     set (MACOSX_RPATH ON)
 endif ()
@@ -425,7 +383,7 @@ set (CMAKE_SKIP_BUILD_RPATH  FALSE)
 # (but later on when installing)
 set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 
 # the RPATH to be used when installing
-set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}")
 # add the automatically determined parts of the RPATH
 # which point to directories outside the build tree to the install RPATH
 set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
@@ -472,7 +430,9 @@ add_subdirectory (src/osl.imageio)
 endif ()
 
 add_subdirectory (src/include)
+if (INSTALL_DOCS)
 add_subdirectory (src/doc)
+endif ()
 
 
 
diff --git a/src/cmake/util_macros.cmake b/src/cmake/util_macros.cmake
index 5691c925..fdaeb042 100644
--- a/src/cmake/util_macros.cmake
+++ b/src/cmake/util_macros.cmake
@@ -107,6 +107,8 @@ endmacro ()
 #    install_targets (target1 [target2 ...])
 #
 macro (install_targets)
-    install (TARGETS ${ARGN} RUNTIME DESTINATION bin
-             LIBRARY DESTINATION lib  ARCHIVE DESTINATION lib)
+    install (TARGETS ${ARGN}
+             RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT user
+             LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT user
+             ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT developer)
 endmacro()
diff --git a/src/doc/CMakeLists.txt b/src/doc/CMakeLists.txt
index 9fefa26d..f90c6f00 100644
--- a/src/doc/CMakeLists.txt
+++ b/src/doc/CMakeLists.txt
@@ -3,15 +3,15 @@ set (public_docs osl-languagespec.pdf
                  markdeep.min.js
                  )
 
-install (FILES ${public_docs} DESTINATION doc COMPONENT documentation)
+install (FILES ${public_docs} DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT documentation)
 
 install ( FILES "${PROJECT_SOURCE_DIR}/LICENSE"
                 "${PROJECT_SOURCE_DIR}/INSTALL.md"
                 "${PROJECT_SOURCE_DIR}/CHANGES.md"
                 "${PROJECT_SOURCE_DIR}/README.md"
-          DESTINATION doc )
+          DESTINATION ${CMAKE_INSTALL_DOCDIR} )
 
 
 file (GLOB testshade_figures "Figures/testshade/*.jpg")
 install (FILES ${testshade_figures}
-         DESTINATION doc/Figures/testshade )
+         DESTINATION ${CMAKE_INSTALL_DOCDIR}/Figures/testshade )
diff --git a/src/include/CMakeLists.txt b/src/include/CMakeLists.txt
index cf3747d1..4656ee78 100644
--- a/src/include/CMakeLists.txt
+++ b/src/include/CMakeLists.txt
@@ -6,4 +6,4 @@ set (OSL_BUILD_CPP14 ${USE_CPP14})
 configure_file (OSL/oslversion.h.in "${CMAKE_BINARY_DIR}/include/OSL/oslversion.h" @ONLY)
 list (APPEND public_headers "${CMAKE_BINARY_DIR}/include/OSL/oslversion.h")
 
-INSTALL ( FILES ${public_headers} DESTINATION include/OSL )
+INSTALL ( FILES ${public_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/OSL )
diff --git a/src/liboslcomp/CMakeLists.txt b/src/liboslcomp/CMakeLists.txt
index b6fa459d..6ad9172f 100644
--- a/src/liboslcomp/CMakeLists.txt
+++ b/src/liboslcomp/CMakeLists.txt
@@ -25,5 +25,5 @@ TARGET_LINK_LIBRARIES ( oslcomp ${OPENIMAGEIO_LIBRARIES} ${ILMBASE_LIBRARIES}
                        ${CLANG_LIBRARIES} ${LLVM_LIBRARIES} ${LLVM_LDFLAGS}
                        ${LLVM_SYSTEM_LIBRARIES})
 
-INSTALL ( TARGETS oslcomp RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+install_targets (oslcomp)
 
diff --git a/src/liboslexec/CMakeLists.txt b/src/liboslexec/CMakeLists.txt
index a0ffca5c..fa8a8728 100644
--- a/src/liboslexec/CMakeLists.txt
+++ b/src/liboslexec/CMakeLists.txt
@@ -157,7 +157,7 @@ TARGET_LINK_LIBRARIES ( oslexec
                         ${LLVM_SYSTEM_LIBRARIES})
 ADD_DEPENDENCIES (oslexec "${CMAKE_SOURCE_DIR}/src/build-scripts/hidesymbols.map")
 
-INSTALL ( TARGETS oslexec RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+install_targets (oslexec)
 
 # Unit tests
 if (OSL_BUILD_TESTS)
diff --git a/src/liboslnoise/CMakeLists.txt b/src/liboslnoise/CMakeLists.txt
index bc4c175c..2df16afe 100644
--- a/src/liboslnoise/CMakeLists.txt
+++ b/src/liboslnoise/CMakeLists.txt
@@ -11,7 +11,7 @@ endif ()
 
 TARGET_LINK_LIBRARIES ( oslnoise ${OPENIMAGEIO_LIBRARY} ${ILMBASE_LIBRARIES} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} )
 
-INSTALL ( TARGETS oslnoise RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+install_targets (oslnoise)
 
 
 if (OSL_BUILD_TESTS)
diff --git a/src/liboslquery/CMakeLists.txt b/src/liboslquery/CMakeLists.txt
index 328fa4bb..083d0d5a 100644
--- a/src/liboslquery/CMakeLists.txt
+++ b/src/liboslquery/CMakeLists.txt
@@ -14,4 +14,4 @@ endif ()
 
 TARGET_LINK_LIBRARIES ( oslquery ${OPENIMAGEIO_LIBRARY} ${ILMBASE_LIBRARIES} ${Boost_LIBRARIES} )
 
-INSTALL ( TARGETS oslquery RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib )
+install_targets (oslquery)
diff --git a/src/osl.imageio/CMakeLists.txt b/src/osl.imageio/CMakeLists.txt
index af612544..a8065e72 100644
--- a/src/osl.imageio/CMakeLists.txt
+++ b/src/osl.imageio/CMakeLists.txt
@@ -1,20 +1,3 @@
-# Macro to install targets to the appropriate locations.  Use this instead of
-# the install(TARGETS ...) signature.
-#
-# Note: the original is in OIIO's src/cmake/oiio_macros.cmake
-#
-# Usage:
-#
-#    oiio_install_targets (target1 [target2 ...])
-#
-macro (oiio_install_targets)
-    install (TARGETS ${ARGN}
-             RUNTIME DESTINATION "${BIN_INSTALL_DIR}" COMPONENT user
-             LIBRARY DESTINATION "${LIB_INSTALL_DIR}" COMPONENT user
-             ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" COMPONENT developer)
-endmacro ()
-
-
 # Macro to add a build target for an IO plugin.
 #
 # Note: the original is in OIIO's src/cmake/oiio_macros.cmake
@@ -37,7 +20,7 @@ macro (add_oiio_plugin)
     add_library (${_target_name} SHARED ${_plugin_DEFAULT_ARGS})
     target_link_libraries (${_target_name} ${OPENIMAGEIO_LIBRARY} ${_plugin_LINK_LIBRARIES})
     set_target_properties (${_target_name} PROPERTIES PREFIX "" FOLDER "Plugins")
-    oiio_install_targets (${_target_name})
+    install_targets (${_target_name})
 endmacro ()
 
 
diff --git a/src/oslc/CMakeLists.txt b/src/oslc/CMakeLists.txt
index d57fc595..47b73611 100644
--- a/src/oslc/CMakeLists.txt
+++ b/src/oslc/CMakeLists.txt
@@ -9,5 +9,5 @@ endif ()
 
 ADD_EXECUTABLE ( oslc ${oslc_srcs} )
 TARGET_LINK_LIBRARIES ( oslc oslcomp ${OPENIMAGEIO_LIBRARY} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
-INSTALL ( TARGETS oslc RUNTIME DESTINATION bin )
+INSTALL ( TARGETS oslc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
 
diff --git a/src/oslinfo/CMakeLists.txt b/src/oslinfo/CMakeLists.txt
index e67b4670..d3519033 100644
--- a/src/oslinfo/CMakeLists.txt
+++ b/src/oslinfo/CMakeLists.txt
@@ -1,4 +1,4 @@
 SET ( oslinfo_srcs oslinfo.cpp )
 ADD_EXECUTABLE ( oslinfo ${oslinfo_srcs} )
 TARGET_LINK_LIBRARIES ( oslinfo oslquery ${OPENIMAGEIO_LIBRARY} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
-INSTALL ( TARGETS oslinfo RUNTIME DESTINATION bin )
+INSTALL ( TARGETS oslinfo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
diff --git a/src/testrender/CMakeLists.txt b/src/testrender/CMakeLists.txt
index 6643e1ee..03197346 100644
--- a/src/testrender/CMakeLists.txt
+++ b/src/testrender/CMakeLists.txt
@@ -2,4 +2,4 @@
 FILE(GLOB testrender_src *.cpp)
 ADD_EXECUTABLE ( testrender ${testrender_src} )
 TARGET_LINK_LIBRARIES ( testrender oslexec oslquery ${OPENIMAGEIO_LIBRARY} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
-INSTALL ( TARGETS testrender RUNTIME DESTINATION bin )
+INSTALL ( TARGETS testrender RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
diff --git a/src/testshade/CMakeLists.txt b/src/testshade/CMakeLists.txt
index ee2f12ce..638097d4 100644
--- a/src/testshade/CMakeLists.txt
+++ b/src/testshade/CMakeLists.txt
@@ -2,7 +2,7 @@
 SET ( testshade_srcs testshade.cpp simplerend.cpp )
 ADD_EXECUTABLE ( testshade ${testshade_srcs} testshademain.cpp )
 TARGET_LINK_LIBRARIES ( testshade oslexec oslquery ${OPENIMAGEIO_LIBRARY} ${OPENEXR_LIBRARIES} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS})
-INSTALL ( TARGETS testshade RUNTIME DESTINATION bin )
+INSTALL ( TARGETS testshade RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
 
 # The 'libtestshade' library
 if (BUILDSTATIC)
@@ -14,10 +14,10 @@ endif ()
 TARGET_LINK_LIBRARIES (libtestshade oslexec oslquery ${OPENIMAGEIO_LIBRARY} ${OPENEXR_LIBRARIES} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} )
 SET_TARGET_PROPERTIES (libtestshade PROPERTIES PREFIX "")
 
-INSTALL ( TARGETS libtestshade RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
+install_targets (libtestshade)
 
 # The 'testshade_dso' executable
 ADD_EXECUTABLE ( testshade_dso testshade_dso.cpp )
 TARGET_LINK_LIBRARIES ( testshade_dso ${OPENIMAGEIO_LIBRARY} ${OPENEXR_LIBRARIES} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} )
-INSTALL ( TARGETS testshade_dso RUNTIME DESTINATION bin )
+INSTALL ( TARGETS testshade_dso RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
 
-- 
2.14.1

