From 8386d669281e375d30901429b262f023c6f22802 Mon Sep 17 00:00:00 2001
From: Mederic Fourmy <mederic.fourmy@gmail.com>
Date: Mon, 25 Apr 2022 17:40:42 +0200
Subject: [PATCH] wolf core compiling and installed without the need for sudo

---
 .gitignore                |  2 +-
 CMakeLists.txt            | 23 ++++++--------
 test/CMakeLists.txt       | 34 ++++----------------
 test/gtest/CMakeLists.txt | 67 +++++----------------------------------
 4 files changed, 26 insertions(+), 100 deletions(-)

diff --git a/.gitignore b/.gitignore
index 77906100d..08224507c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ README.txt
 bin/
 build/
 build_release/
+build_debug/
 lib/
 .idea/
 ./Wolf.user
@@ -30,7 +31,6 @@ src/CMakeFiles/cmake.check_cache
 src/examples/map_apriltag_save.yaml
 
 \.vscode/
-build_release/
 .clangd
 wolfcore.found
 /wolf.found
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c94b33bfb..20cd9418c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@
 MESSAGE(STATUS "Starting WOLF CMakeLists ...")
 
 # Pre-requisites about cmake itself
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
 
 if(COMMAND cmake_policy)
   cmake_policy(SET CMP0005 NEW)
@@ -19,7 +19,6 @@ set(PLUGIN_NAME "wolf${PROJECT_NAME}")
 # Paths
 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)
 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
-SET(CMAKE_INSTALL_PREFIX /usr/local)
 SET(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY FALSE)
 
 # Build type
@@ -91,7 +90,7 @@ FIND_PACKAGE(Eigen3 3.3 REQUIRED)
 if(${EIGEN3_VERSION_STRING} VERSION_LESS 3.3)
   message(FATAL_ERROR "Wolf requires Eigen >= 3.3. Found Eigen ${EIGEN3_VERSION_STRING}")
 endif()
-FIND_PACKAGE(YamlCpp REQUIRED)
+FIND_PACKAGE(yaml-cpp REQUIRED)
 
 # ============ config.h ============ 
 set(_WOLF_ROOT_DIR ${CMAKE_SOURCE_DIR})
@@ -124,9 +123,6 @@ ENDIF (SPDLOG_INCLUDE_DIR)
 
 # ============ INCLUDES ============ 
 INCLUDE_DIRECTORIES("include") # In this same project
-INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIRS})
-INCLUDE_DIRECTORIES(${YAMLCPP_INCLUDE_DIR})
-INCLUDE_DIRECTORIES(${CERES_INCLUDE_DIRS})
 # ============ HEADERS ============ 
 SET(HDRS_CAPTURE
   include/core/capture/capture_base.h
@@ -424,7 +420,8 @@ endif()
 #Link the created libraries
 #=============================================================
 TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${CMAKE_THREAD_LIBS_INIT} dl)
-TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${YAMLCPP_LIBRARY})
+# TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${YAMLCPP_LIBRARY})
+TARGET_LINK_LIBRARIES(${PLUGIN_NAME} yaml-cpp)
 IF (Ceres_FOUND)
     TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${CERES_LIBRARIES})
 ENDIF(Ceres_FOUND)
@@ -500,14 +497,14 @@ INSTALL(FILES "${WOLF_CONFIG_DIR}/config.h"
   DESTINATION include/iri-algorithms/wolf/plugin_core/core/internal)
 
 #install Find*.cmake
-configure_file("${CMAKE_SOURCE_DIR}/cmake_modules/${PLUGIN_NAME}Config.cmake"
-               "${CMAKE_BINARY_DIR}/${PLUGIN_NAME}Config.cmake" @ONLY)
+# configure_file("${CMAKE_SOURCE_DIR}/cmake_modules/${PLUGIN_NAME}Config.cmake"
+#                "${CMAKE_BINARY_DIR}/${PLUGIN_NAME}Config.cmake" @ONLY)
 
-configure_file("${CMAKE_SOURCE_DIR}/cmake_modules/FindYamlCpp.cmake"
-               "${CMAKE_BINARY_DIR}/FindYamlCpp.cmake" @ONLY)
+# configure_file("${CMAKE_SOURCE_DIR}/cmake_modules/FindYamlCpp.cmake"
+#                "${CMAKE_BINARY_DIR}/FindYamlCpp.cmake" @ONLY)
 
-INSTALL(FILES "${CMAKE_BINARY_DIR}/${PLUGIN_NAME}Config.cmake" DESTINATION "lib/cmake/${PLUGIN_NAME}")
-INSTALL(FILES "${CMAKE_BINARY_DIR}/FindYamlCpp.cmake" DESTINATION "lib/cmake/${PLUGIN_NAME}")
+# INSTALL(FILES "${CMAKE_BINARY_DIR}/${PLUGIN_NAME}Config.cmake" DESTINATION "lib/cmake/${PLUGIN_NAME}")
+# INSTALL(FILES "${CMAKE_BINARY_DIR}/FindYamlCpp.cmake" DESTINATION "lib/cmake/${PLUGIN_NAME}")
 
 INSTALL(DIRECTORY ${SPDLOG_INCLUDE_DIRS} DESTINATION "include/iri-algorithms/")
 
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index dd7732c47..ac6b9ac6e 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,28 +1,8 @@
 # Retrieve googletest from github & compile
 add_subdirectory(gtest)
 
-
-## Added these two include_dirs: ######################
-#
-#CMAKE modules
-#SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules")
-#MESSAGE(STATUS ${CMAKE_MODULE_PATH})
-#
-# Include Eigen
-#FIND_PACKAGE(Eigen 3 REQUIRED)
-#INCLUDE_DIRECTORIES(${EIGEN_INCLUDE_DIRS})
-#
-# Include Ceres
-#FIND_PACKAGE(Ceres QUIET) #Ceres is not required
-#IF(Ceres_FOUND)
-#    INCLUDE_DIRECTORIES(${CERES_INCLUDE_DIRS})
-#ENDIF(Ceres_FOUND)
-#
-## and now gtest_motion_2d works ######################
-
-
-# Include gtest directory.
-include_directories(${GTEST_INCLUDE_DIRS})
+# # Include gtest directory.
+# include_directories(${GTEST_INCLUDE_DIRS})
 
 ############# USE THIS TEST AS AN EXAMPLE #################
 #                                                         #
@@ -30,7 +10,7 @@ include_directories(${GTEST_INCLUDE_DIRS})
 wolf_add_gtest(gtest_example gtest_example.cpp)           #
 target_link_libraries(gtest_example ${PLUGIN_NAME})      #
 #                                                         #
-###########################################################
+##########################################################
 set(SRC_DUMMY
   dummy/processor_tracker_feature_dummy.cpp
   dummy/processor_tracker_landmark_dummy.cpp
@@ -38,10 +18,10 @@ set(SRC_DUMMY
   )
 add_library(dummy SHARED ${SRC_DUMMY})
 target_link_libraries(dummy ${PLUGIN_NAME})
-################# ADD YOUR TESTS BELOW ####################
-#                                                         #
-#           ==== IN ALPHABETICAL ORDER! ====              #
-#                                                         #
+################ ADD YOUR TESTS BELOW ####################
+#                                                        # 
+#           ==== IN ALPHABETICAL ORDER! ====             #
+#                                                        #
 
 # ------- First Core classes ----------
 
diff --git a/test/gtest/CMakeLists.txt b/test/gtest/CMakeLists.txt
index 559756b02..da1bee837 100644
--- a/test/gtest/CMakeLists.txt
+++ b/test/gtest/CMakeLists.txt
@@ -1,65 +1,14 @@
-cmake_minimum_required(VERSION 2.8.8)
-project(gtest_builder C CXX)
+include(FetchContent)
+FetchContent_Declare(
+  googletest
+  GIT_REPOSITORY https://github.com/google/googletest.git 
+  GIT_TAG main)
+FetchContent_MakeAvailable(googletest)
 
-# We need thread support
-#find_package(Threads REQUIRED)
-
-# Enable ExternalProject CMake module
-include(ExternalProject)
-
-set(GTEST_FORCE_SHARED_CRT ON)
-set(GTEST_DISABLE_PTHREADS OFF)
-
-# For some reason I need to disable PTHREADS
-# with g++ (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
-# This is a known issue for MinGW :
-# https://github.com/google/shaderc/pull/174
-#if(MINGW)
-    set(GTEST_DISABLE_PTHREADS ON)
-#endif()
-
-# Download GoogleTest
-ExternalProject_Add(googletest
-    GIT_REPOSITORY https://github.com/google/googletest.git
-    GIT_TAG        v1.8.x
-    # TIMEOUT 1 # We'll try this
-    CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
-    -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
-    -DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
-    -Dgtest_force_shared_crt=${GTEST_FORCE_SHARED_CRT}
-    -Dgtest_disable_pthreads=${GTEST_DISABLE_PTHREADS}
-    -DBUILD_GTEST=ON
-    PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
-    # Disable install step
-    INSTALL_COMMAND ""
-    UPDATE_DISCONNECTED 1 # 1: do not update googletest; 0: update googletest via github
-)
-
-# Get GTest source and binary directories from CMake project
-
-# Specify include dir
-ExternalProject_Get_Property(googletest source_dir)
-set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE)
-
-# Specify MainTest's link libraries
-ExternalProject_Get_Property(googletest binary_dir)
-set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE)
-
-# Create a libgtest target to be used as a dependency by test programs
-add_library(libgtest IMPORTED STATIC GLOBAL)
-add_dependencies(libgtest googletest)
-
-# Set libgtest properties
-set_target_properties(libgtest PROPERTIES
-    "IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest.a"
-    "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
-)
 
 function(wolf_add_gtest target)
   add_executable(${target} ${ARGN})
-  add_dependencies(${target} libgtest)
-  target_link_libraries(${target} libgtest)
-
-  #WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
+  target_link_libraries(${target}  gtest_main)
   add_test(NAME ${target} COMMAND ${target})
 endfunction()
+
-- 
GitLab