From: Juhani Numminen <juhaninumminen0@gmail.com>
Date: Fri, 17 Jan 2020 17:45:45 +0200
Subject: Avoid-buildpath-in-installed-files

Workaround to avoid build paths in exported cmake targets.
---
 dynamicEDT3D/CMakeLists.txt              | 20 +++-----------------
 dynamicEDT3D/dynamicEDT3DConfig.cmake.in |  3 +++
 dynamicEDT3D/src/CMakeLists.txt          |  6 ++++--
 octomap/CMakeLists.txt                   |  5 -----
 octomap/src/CMakeLists.txt               |  4 +++-
 octomap/src/math/CMakeLists.txt          |  2 ++
 octovis/CMakeLists.txt                   |  2 --
 octovis/CMakeLists_src.txt               |  6 ++++--
 octovis/octovis-config.cmake.in          |  3 +++
 9 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/dynamicEDT3D/CMakeLists.txt b/dynamicEDT3D/CMakeLists.txt
index 7edfdde..8354de6 100644
--- a/dynamicEDT3D/CMakeLists.txt
+++ b/dynamicEDT3D/CMakeLists.txt
@@ -38,28 +38,14 @@ foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
   SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BASE_DIR}/bin )
 endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
 
-set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include")
-INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
-
-LINK_DIRECTORIES(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-
 # Installation
 
 set(INSTALL_TARGETS_DEFAULT_ARGS
-	RUNTIME DESTINATION bin
-	LIBRARY DESTINATION lib
-	ARCHIVE DESTINATION lib
+        RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+        LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+        ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
 )
 
-find_package(octomap REQUIRED
-  HINTS ${CMAKE_SOURCE_DIR}/lib/cmake/octomap
-   ${CMAKE_SOURCE_DIR}/../octomap/lib/cmake/octomap
-)
-MESSAGE(STATUS "Found octomap version: " ${octomap_VERSION})
-MESSAGE(STATUS "octomap libraries: ${OCTOMAP_LIBRARIES}")
-
-INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OCTOMAP_INCLUDE_DIRS})
-
 ADD_SUBDIRECTORY(src)
 
 
diff --git a/dynamicEDT3D/dynamicEDT3DConfig.cmake.in b/dynamicEDT3D/dynamicEDT3DConfig.cmake.in
index c8ffd88..89269ad 100644
--- a/dynamicEDT3D/dynamicEDT3DConfig.cmake.in
+++ b/dynamicEDT3D/dynamicEDT3DConfig.cmake.in
@@ -18,6 +18,9 @@
 
 @PACKAGE_INIT@
 
+include(CMakeFindDependencyMacro)
+find_dependency(octomap @OCTOMAP_VERSION@)
+
 set(DYNAMICEDT3D_MAJOR_VERSION "@DYNAMICEDT3D_MAJOR_VERSION@")
 set(DYNAMICEDT3D_MINOR_VERSION "@DYNAMICEDT3D_MINOR_VERSION@")
 set(DYNAMICEDT3D_PATCH_VERSION "@DYNAMICEDT3D_PATCH_VERSION@")
diff --git a/dynamicEDT3D/src/CMakeLists.txt b/dynamicEDT3D/src/CMakeLists.txt
index 0b9357c..83b5e99 100644
--- a/dynamicEDT3D/src/CMakeLists.txt
+++ b/dynamicEDT3D/src/CMakeLists.txt
@@ -3,14 +3,16 @@ SET( dynamicEDT3D_SRCS
    )
 
 add_library(dynamicedt3d SHARED ${dynamicEDT3D_SRCS})
+target_include_directories(dynamicedt3d PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 set_target_properties(dynamicedt3d PROPERTIES
   VERSION ${DYNAMICEDT3D_VERSION}
   SOVERSION ${DYNAMICEDT3D_SOVERSION}
 )
-target_link_libraries(dynamicedt3d ${OCTOMAP_LIBRARIES})
+target_link_libraries(dynamicedt3d octomap)
 
 add_library(dynamicedt3d-static STATIC ${dynamicEDT3D_SRCS})
-target_link_libraries(dynamicedt3d-static ${OCTOMAP_LIBRARIES})
+target_include_directories(dynamicedt3d-static PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+target_link_libraries(dynamicedt3d-static octomap-static)
 
 SET_TARGET_PROPERTIES(dynamicedt3d-static PROPERTIES OUTPUT_NAME "dynamicedt3d") 
 
diff --git a/octomap/CMakeLists.txt b/octomap/CMakeLists.txt
index 87a78e9..63f1501 100644
--- a/octomap/CMakeLists.txt
+++ b/octomap/CMakeLists.txt
@@ -48,11 +48,6 @@ foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
   SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BASE_DIR}/bin )
 endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
 
-set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include")
-INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
-
-LINK_DIRECTORIES(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-
 # Installation
 
 set(INSTALL_TARGETS_DEFAULT_ARGS
diff --git a/octomap/src/CMakeLists.txt b/octomap/src/CMakeLists.txt
index 45b384f..3ffca58 100644
--- a/octomap/src/CMakeLists.txt
+++ b/octomap/src/CMakeLists.txt
@@ -12,13 +12,15 @@ SET (octomap_SRCS
 
 # dynamic and static libs, see CMake FAQ:
 ADD_LIBRARY( octomap SHARED ${octomap_SRCS})
+target_include_directories(octomap PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDE_DIR}>)
 set_target_properties( octomap PROPERTIES
   VERSION ${OCTOMAP_VERSION}
   SOVERSION ${OCTOMAP_SOVERSION}
 )
 ADD_LIBRARY( octomap-static STATIC ${octomap_SRCS})
+target_include_directories(octomap-static PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDE_DIR}>)
 SET_TARGET_PROPERTIES(octomap-static PROPERTIES OUTPUT_NAME "octomap") 
-add_dependencies(octomap-static octomath-static)
+TARGET_LINK_LIBRARIES(octomap-static octomath-static)
 
 TARGET_LINK_LIBRARIES(octomap octomath)
 
diff --git a/octomap/src/math/CMakeLists.txt b/octomap/src/math/CMakeLists.txt
index 3b47ec4..3edddf8 100644
--- a/octomap/src/math/CMakeLists.txt
+++ b/octomap/src/math/CMakeLists.txt
@@ -6,6 +6,7 @@ SET (octomath_SRCS
 
 
 ADD_LIBRARY( octomath SHARED ${octomath_SRCS})
+target_include_directories(octomath PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 SET_TARGET_PROPERTIES( octomath PROPERTIES
   VERSION ${OCTOMAP_VERSION}
@@ -13,6 +14,7 @@ SET_TARGET_PROPERTIES( octomath PROPERTIES
 )
 
 ADD_LIBRARY( octomath-static STATIC ${octomath_SRCS})
+target_include_directories(octomath-static PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 SET_TARGET_PROPERTIES(octomath-static PROPERTIES OUTPUT_NAME "octomath")
 
 if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap")
diff --git a/octovis/CMakeLists.txt b/octovis/CMakeLists.txt
index 84fa367..ebddde2 100644
--- a/octovis/CMakeLists.txt
+++ b/octovis/CMakeLists.txt
@@ -49,8 +49,6 @@ ${CMAKE_SOURCE_DIR}/../octomap/lib/cmake/octomap
 )
 MESSAGE(STATUS "Found octomap version: " ${octomap_VERSION})
 
-INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OCTOMAP_INCLUDE_DIRS})
-
 # Export the package for use from the build-tree
 # (this registers the build-tree with a global CMake-registry)
 export(PACKAGE octovis)
diff --git a/octovis/CMakeLists_src.txt b/octovis/CMakeLists_src.txt
index 35bc1f2..364ca95 100644
--- a/octovis/CMakeLists_src.txt
+++ b/octovis/CMakeLists_src.txt
@@ -100,19 +100,21 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR})
 
 # Library target 
 add_library(octovis-static STATIC ${viewerlib_SRCS})
+target_include_directories(octovis-static PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 target_link_libraries(octovis-static
   ${OPENGL_gl_LIBRARY} 
   ${OPENGL_glu_LIBRARY} 
-  ${OCTOMAP_LIBRARIES}
+  octomap-static
   ${QGLViewer_LIBRARIES}
 )
 set_target_properties(octovis-static PROPERTIES OUTPUT_NAME octovis)
 
 add_library(octovis-shared SHARED ${viewerlib_SRCS})
+target_include_directories(octovis-shared PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 target_link_libraries(octovis-shared 
   ${OPENGL_gl_LIBRARY} 
   ${OPENGL_glu_LIBRARY} 
-  ${OCTOMAP_LIBRARIES}
+  octomap
   ${QGLViewer_LIBRARIES}
 )
 set_target_properties(octovis-shared PROPERTIES
diff --git a/octovis/octovis-config.cmake.in b/octovis/octovis-config.cmake.in
index 3add82e..8fced5a 100644
--- a/octovis/octovis-config.cmake.in
+++ b/octovis/octovis-config.cmake.in
@@ -9,6 +9,9 @@
 
 @PACKAGE_INIT@
 
+include(CMakeFindDependencyMacro)
+find_dependency(octomap @OCTOMAP_VERSION@)
+
 set(OCTOVIS_MAJOR_VERSION "@OCTOVIS_MAJOR_VERSION@")
 set(OCTOVIS_MINOR_VERSION "@OCTOVIS_MINOR_VERSION@")
 set(OCTOVIS_PATCH_VERSION "@OCTOVIS_PATCH_VERSION@")
