From cacc362921af0477eb951eb449d6b62ea3e53242 Mon Sep 17 00:00:00 2001 From: Juhani Numminen Date: Thu, 23 Jan 2020 10:54:03 +0200 Subject: [PATCH 1/4] Remove code that allows octovis CMake config to fail. To skip building octovis as a part of octomap-distribution build, explicitly set BUILD_OCTOVIS_SUBPROJECT=OFF. --- octovis/CMakeLists.txt | 161 ++++++++++++++++++----------------------- 1 file changed, 69 insertions(+), 92 deletions(-) diff --git a/octovis/CMakeLists.txt b/octovis/CMakeLists.txt index d20b7d65..8e2e323d 100644 --- a/octovis/CMakeLists.txt +++ b/octovis/CMakeLists.txt @@ -60,107 +60,84 @@ set(INSTALL_TARGETS_DEFAULT_ARGS ARCHIVE DESTINATION lib ) -# Builds the "octovis" viewer based on OpenGL and -# libQGLViewer, if dependencies available -SET( BUILD_VIEWER 0) - option(OCTOVIS_QT5 "Link Octovis against Qt5?" ON) # Look for required libraries: -FIND_PACKAGE(OpenGL) +FIND_PACKAGE(OpenGL REQUIRED) if(NOT OCTOVIS_QT5) - FIND_PACKAGE(Qt4) + FIND_PACKAGE(Qt4 REQUIRED) endif(NOT OCTOVIS_QT5) -IF (OpenGL-NOTFOUND OR Qt4-NOTFOUND) - MESSAGE ( "OpenGL and QT4 are required for octovis but could not be found.") -ELSE() - FIND_PACKAGE(QGLViewer) - IF(QGLViewer_FOUND) - SET( BUILD_VIEWER 1) - ELSE() - MESSAGE ( "\n") - MESSAGE ( "libQGLViewer could not be found or generated.") - ENDIF() -ENDIF() +FIND_PACKAGE(QGLViewer REQUIRED) +MESSAGE(STATUS "\n") +MESSAGE(STATUS "viewer octovis will be built") -IF(BUILD_VIEWER) - MESSAGE(STATUS "\n") - MESSAGE(STATUS "viewer octovis will be built") - - set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include") - INCLUDE_DIRECTORIES(${INCLUDE_DIRS}) - - INCLUDE( CMakeLists_src.txt ) - - # Create an octovis-config.cmake file for the use from the build tree - set(OCTOVIS_INCLUDE_DIRS "${INCLUDE_DIRS}") - set(OCTOVIS_LIB_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - # Set library names as absolute paths - # Windows, spec. MSVC requires the .lib suffix for imported libs - IF(WIN32) - set(OCTOVIS_LIBRARY - "${CMAKE_IMPORT_LIBRARY_PREFIX}octovis${CMAKE_IMPORT_LIBRARY_SUFFIX}" - ) - ELSE() - set(OCTOVIS_LIBRARY - "${CMAKE_SHARED_LIBRARY_PREFIX}octovis${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) - ENDIF() - - include(CMakePackageConfigHelpers) - - CONFIGURE_PACKAGE_CONFIG_FILE( - octovis-config.cmake.in - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-config.cmake" - PATH_VARS OCTOVIS_INCLUDE_DIRS OCTOVIS_LIB_DIR - INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/octovis) - - WRITE_BASIC_PACKAGE_VERSION_FILE( - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-config-version.cmake" - VERSION ${OCTOVIS_VERSION} - COMPATIBILITY AnyNewerVersion) - - # not used right now (export depends?) - #set(OCTOMAP_CMAKE_DIR "${PROJECT_BINARY_DIR}") - - # Create a octovis-config.cmake file for the use from the install tree - # and install it - set(OCTOVIS_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include") - set(OCTOVIS_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") - #set(OCTOMAP_CMAKE_DIR "${INSTALL_DATA_DIR}/FooBar/CMake") - - set(OCTOVIS_INCLUDE_TARGETS - "include(\${CMAKE_CURRENT_LIST_DIR}/octovis-targets.cmake)") - - CONFIGURE_PACKAGE_CONFIG_FILE( - octovis-config.cmake.in - "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config.cmake" - PATH_VARS OCTOVIS_INCLUDE_DIRS OCTOVIS_LIB_DIR - INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/octovis) - - WRITE_BASIC_PACKAGE_VERSION_FILE( - "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config-version.cmake" - VERSION ${OCTOVIS_VERSION} - COMPATIBILITY AnyNewerVersion) - - install(FILES - "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config.cmake" - "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config-version.cmake" - DESTINATION share/octovis/) - - # #installation: - # # store all header files to install: - file(GLOB octovis_HDRS *.h *.hxx *.hpp) - install(FILES ${octovis_HDRS} DESTINATION include/octovis) - - # Install catkin package.xml - install(FILES package.xml DESTINATION share/octovis) +set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include") +INCLUDE_DIRECTORIES(${INCLUDE_DIRS}) + +INCLUDE( CMakeLists_src.txt ) +# Create an octovis-config.cmake file for the use from the build tree +set(OCTOVIS_INCLUDE_DIRS "${INCLUDE_DIRS}") +set(OCTOVIS_LIB_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") +# Set library names as absolute paths +# Windows, spec. MSVC requires the .lib suffix for imported libs +IF(WIN32) + set(OCTOVIS_LIBRARY + "${CMAKE_IMPORT_LIBRARY_PREFIX}octovis${CMAKE_IMPORT_LIBRARY_SUFFIX}" + ) ELSE() - MESSAGE ( "Unfortunately, the viewer (octovis) can not be built because some requirements are missing.") - MESSAGE ( "This will not affect the compilation of the stand-alone library and tools (octomap)") - MESSAGE ( "See README.txt or http://octomap.sf.net for further information.\n") + set(OCTOVIS_LIBRARY + "${CMAKE_SHARED_LIBRARY_PREFIX}octovis${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) ENDIF() +include(CMakePackageConfigHelpers) + +CONFIGURE_PACKAGE_CONFIG_FILE( + octovis-config.cmake.in + "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-config.cmake" + PATH_VARS OCTOVIS_INCLUDE_DIRS OCTOVIS_LIB_DIR + INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/octovis) + +WRITE_BASIC_PACKAGE_VERSION_FILE( + "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-config-version.cmake" + VERSION ${OCTOVIS_VERSION} + COMPATIBILITY AnyNewerVersion) + +# not used right now (export depends?) +#set(OCTOMAP_CMAKE_DIR "${PROJECT_BINARY_DIR}") + +# Create a octovis-config.cmake file for the use from the install tree +# and install it +set(OCTOVIS_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include") +set(OCTOVIS_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") +#set(OCTOMAP_CMAKE_DIR "${INSTALL_DATA_DIR}/FooBar/CMake") + +set(OCTOVIS_INCLUDE_TARGETS + "include(\${CMAKE_CURRENT_LIST_DIR}/octovis-targets.cmake)") + +CONFIGURE_PACKAGE_CONFIG_FILE( + octovis-config.cmake.in + "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config.cmake" + PATH_VARS OCTOVIS_INCLUDE_DIRS OCTOVIS_LIB_DIR + INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/octovis) + +WRITE_BASIC_PACKAGE_VERSION_FILE( + "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config-version.cmake" + VERSION ${OCTOVIS_VERSION} + COMPATIBILITY AnyNewerVersion) + +install(FILES + "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config.cmake" + "${PROJECT_BINARY_DIR}/InstallFiles/octovis-config-version.cmake" + DESTINATION share/octovis/) + +# #installation: +# # store all header files to install: +file(GLOB octovis_HDRS *.h *.hxx *.hpp) +install(FILES ${octovis_HDRS} DESTINATION include/octovis) + +# Install catkin package.xml +install(FILES package.xml DESTINATION share/octovis) From 6219f5af4d79e3c078574ef22ae7f0139b2f3dc6 Mon Sep 17 00:00:00 2001 From: Juhani Numminen Date: Thu, 23 Jan 2020 12:29:26 +0200 Subject: [PATCH 2/4] Do not build QGLViewer using CMake (#225) --- octovis/CMakeLists_src.txt | 4 +- octovis/CMakeModules/FindQGLViewer.cmake | 129 +++-------------------- octovis/octovis-config.cmake.in | 2 +- 3 files changed, 14 insertions(+), 121 deletions(-) diff --git a/octovis/CMakeLists_src.txt b/octovis/CMakeLists_src.txt index 1f800c2d..c7d1e55e 100644 --- a/octovis/CMakeLists_src.txt +++ b/octovis/CMakeLists_src.txt @@ -57,9 +57,7 @@ else(OCTOVIS_QT5) QT4_ADD_RESOURCES(viewer_RES src/icons.qrc) endif(OCTOVIS_QT5) -#found QGLViewer lib dir -link_directories(${QGLViewer_LIBRARY_DIR}) - +#found QGLViewer include dir INCLUDE_DIRECTORIES( ${QGLViewer_INCLUDE_DIR} ) diff --git a/octovis/CMakeModules/FindQGLViewer.cmake b/octovis/CMakeModules/FindQGLViewer.cmake index 9b64430b..d427e5cb 100644 --- a/octovis/CMakeModules/FindQGLViewer.cmake +++ b/octovis/CMakeModules/FindQGLViewer.cmake @@ -1,126 +1,21 @@ # Find QGLViewer library -# Looks for a system-wide version of libQGLViewer (qglviewer-qt4 or 5 in Ubuntu). -# If none is found, it builds and uses the local copy in "extern" -# -# Many thanks to L. Ott for assistance! +# Looks for a system-wide version of libQGLViewer. # # QGLViewer_INCLUDE_DIR where to find the include files -# QGLViewer_LIBRARY_DIR where to find the libraries # QGLViewer_LIBRARIES list of libraries to link # QGLViewer_FOUND true if QGLViewer was found -SET( QGLViewer_FOUND 0 CACHE BOOL "Do we have QGLViewer?" ) - -FIND_PATH( QGLVIEWER_BASE_DIR qglviewer.h - ${CMAKE_SOURCE_DIR}/src/extern/QGLViewer - ${CMAKE_SOURCE_DIR}/octovis/src/extern/QGLViewer -) - -FIND_PATH( QGLViewer_INCLUDE_DIR qglviewer.h - /usr/include/qglviewer-qt4 - /usr/include/QGLViewer - /opt/local/include/QGLViewer - ${QGLVIEWER_BASE_DIR} -) - -IF( QT4_FOUND ) - FIND_LIBRARY( QGLViewer_LIBRARY_DIR_UBUNTU NAMES qglviewer-qt4 QGLViewer-qt4) -ELSE() - FIND_LIBRARY( QGLViewer_LIBRARY_DIR_UBUNTU NAMES qglviewer-qt5 QGLViewer-qt5) -ENDIF() -FIND_LIBRARY( QGLViewer_LIBRARY_DIR_WINDOWS QGLViewer2 ${QGLVIEWER_BASE_DIR}) -FIND_LIBRARY( QGLViewer_LIBRARY_DIR_OTHER QGLViewer ${QGLVIEWER_BASE_DIR}) - -SET( BUILD_LIB_FROM_SOURCE 0) - -IF( QGLViewer_INCLUDE_DIR ) - - MESSAGE(STATUS "QGLViewer includes found in ${QGLViewer_INCLUDE_DIR}") - IF (QGLViewer_LIBRARY_DIR_UBUNTU) - MESSAGE(STATUS "QGLViewer library found in ${QGLViewer_LIBRARY_DIR_UBUNTU}") - SET( QGLViewer_LIBRARIES ${QGLViewer_LIBRARY_DIR_UBUNTU}) - SET( QGLViewer_FOUND 1 CACHE BOOL "Do we have QGLViewer?" FORCE ) - ELSEIF(QGLViewer_LIBRARY_DIR_WINDOWS) - MESSAGE(STATUS "QGLViewer2 found in ${QGLViewer_LIBRARY_DIR_WINDOWS}") - SET( QGLViewer_LIBRARIES ${QGLViewer_LIBRARY_DIR_WINDOWS}) - SET( QGLViewer_FOUND 1 CACHE BOOL "Do we have QGLViewer?" FORCE ) - ELSEIF(QGLViewer_LIBRARY_DIR_OTHER) - MESSAGE(STATUS "QGLViewer found in ${QGLViewer_LIBRARY_DIR_OTHER}") - SET( QGLViewer_LIBRARIES ${QGLViewer_LIBRARY_DIR_OTHER}) - SET( QGLViewer_FOUND 1 CACHE BOOL "Do we have QGLViewer?" FORCE ) - ELSE() - MESSAGE(STATUS "QGLViewer library not found.") - SET( BUILD_LIB_FROM_SOURCE 1) - SET( QGLViewer_FOUND 0 CACHE BOOL "Do we have QGLViewer?" FORCE ) - ENDIF() - -ELSE() - SET( BUILD_LIB_FROM_SOURCE 1) -ENDIF() - -# build own libQGLViewer -IF(BUILD_LIB_FROM_SOURCE) - - IF (WIN32) - MESSAGE("Cannot generate QGLViewer2 from source automatically.") - MESSAGE("Please build libQGLViewer from source, instructions to do so") - MESSAGE("can be found in octovis/README.txt") - MESSAGE("Please rerun CMAKE when you are ready.") - - ELSE (WIN32) - IF(QGLVIEWER_BASE_DIR) - MESSAGE(STATUS "Trying to build libQGLViewer from source in ${QGLVIEWER_BASE_DIR}") - - FIND_PROGRAM(QMAKE-QT4 qmake-qt4) - IF (QMAKE-QT4) - MESSAGE(STATUS "\t generating Makefile using qmake-qt4") - EXECUTE_PROCESS( - WORKING_DIRECTORY ${QGLVIEWER_BASE_DIR} - COMMAND qmake-qt4 - OUTPUT_QUIET - ) - ELSE(QMAKE-QT4) - MESSAGE(STATUS "\t generating Makefile using qmake") - EXECUTE_PROCESS( - WORKING_DIRECTORY ${QGLVIEWER_BASE_DIR} - COMMAND qmake-qt4 - OUTPUT_QUIET - ) - ENDIF(QMAKE-QT4) - - MESSAGE(STATUS "\t building library (this may take some time...)") - EXECUTE_PROCESS( - WORKING_DIRECTORY ${QGLVIEWER_BASE_DIR} - COMMAND make - OUTPUT_QUIET - ) - ENDIF(QGLVIEWER_BASE_DIR) - ENDIF(WIN32) - -ELSE(BUILD_LIB_FROM_SOURCE) - IF (NOT QGLViewer_FOUND) - MESSAGE(STATUS "QGLViewer sources NOT found. Exiting.") - ENDIF () -ENDIF(BUILD_LIB_FROM_SOURCE) +find_path(QGLViewer_INCLUDE_DIR + NAMES qglviewer.h + PATH_SUFFIXES QGLViewer) -# verify that QGLViewer lib was build if we didnt find it elsewhere -IF (NOT QGLViewer_FOUND) - #FIND_LIBRARY(QGLViewer_LIBRARY_DIR_OTHER QGLViewer ${QGLVIEWER_BASE_DIR}) - FIND_PATH(QGLLIB libQGLViewer.so ${QGLVIEWER_BASE_DIR}) - IF (NOT QGLLIB) - MESSAGE(WARNING "Could not find libQGLViewer.so, failed to build?") - SET( QGLViewer_FOUND 0 CACHE BOOL "Do we have QGLViewer?" FORCE ) - ELSE() - MESSAGE(STATUS "Successfully built library in:\n${QGLLIB}") - SET( QGLViewer_INCLUDE_DIR ${QGLVIEWER_BASE_DIR} CACHE PATH "QGLViewer Include directory" FORCE) - SET( QGLViewer_LIBRARY_DIR ${QGLVIEWER_BASE_DIR} CACHE PATH "QGLViewer Library directory" FORCE) - # TODO: also include "m pthread QGLViewerGen QGLViewerUtility"? - SET( QGLViewer_LIBRARIES QGLViewer) - SET( QGLViewer_FOUND 1 CACHE BOOL "Do we have QGLViewer?" FORCE ) - ENDIF() -ENDIF() +find_library(QGLViewer_LIBRARIES + NAMES QGLViewer QGLViewer2 QGLViewer-qt5 QGLViewer-qt4) -# You need to use qmake of QT4. You are using QT3 if you get: +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + QGLViewer + DEFAULT_MSG + QGLViewer_LIBRARIES QGLViewer_INCLUDE_DIR) -#CMakeFiles/octovis.dir/ViewerWidget.cpp.o: In function `octomap::ViewerWidget::ViewerWidget(QWidget*)': -#ViewerWidget.cpp:(.text+0x1715): undefined reference to `QGLViewer::QGLViewer(QWidget*, QGLWidget const*, QFlags)' +mark_as_advanced(QGLViewer_INCLUDE_DIR QGLViewer_LIBRARIES) diff --git a/octovis/octovis-config.cmake.in b/octovis/octovis-config.cmake.in index 3add82ee..a156bbbf 100644 --- a/octovis/octovis-config.cmake.in +++ b/octovis/octovis-config.cmake.in @@ -15,7 +15,7 @@ set(OCTOVIS_PATCH_VERSION "@OCTOVIS_PATCH_VERSION@") set(OCTOVIS_VERSION "@OCTOVIS_VERSION@") set_and_check(OCTOVIS_INCLUDE_DIRS "@PACKAGE_OCTOVIS_INCLUDE_DIRS@" "@QGLViewer_INCLUDE_DIR@") -set_and_check(OCTOVIS_LIBRARY_DIRS "@PACKAGE_OCTOVIS_LIB_DIR@" "@QGLViewer_LIBRARY_DIR@") +set_and_check(OCTOVIS_LIBRARY_DIRS "@PACKAGE_OCTOVIS_LIB_DIR@") # Set library names as absolute paths: set(OCTOVIS_LIBRARIES From 63168a3125e9bf0672b5a1011b8be68a755e3198 Mon Sep 17 00:00:00 2001 From: Juhani Numminen Date: Thu, 23 Jan 2020 12:52:39 +0200 Subject: [PATCH 3/4] Add generic QGLViewer guidance in octovis build instructions --- octovis/README.md | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/octovis/README.md b/octovis/README.md index 19c7e148..0669cd7d 100644 --- a/octovis/README.md +++ b/octovis/README.md @@ -12,9 +12,16 @@ Octovis is based on [QGLViewer](http://www.libqglviewer.com/), distributed under (octovis/src/extern/QGLViewer/GPL_EXCEPTION). -LINUX +BUILD ----- +To compile the library you need: + +* OpenGL +* cmake (http://www.cmake.org) +* Qt development environment +* QGLViewer + You can build octovis independently of octomap by following the these steps: @@ -28,17 +35,10 @@ the these steps: You can manually set the location of the octomap library with the `octomap_DIR` variable in CMake. -Note: If you get an error such as - -> CMake Error at /usr/share/cmake-2.8/Modules/FindQt4.cmake:1148 (MESSAGE): -> Qt qmake not found! - -but you have Qt4 installed, this probably means that both Qt3 and Qt4 -are installed. In Ubuntu this can be resolved by executing: - - sudo update-alternatives --config qmake - -and choosing Qt4. +If you compiled QGLViewer on your own and CMake cannot find it, +you can use the variable `QGLViewer_INCLUDE_DIR` to specify +the header file location and `QGLViewer_LIBRARIES` to set +the library file to link against (e.g. libQGLViewer.so or QGLViewer.lib). WINDOWS @@ -48,12 +48,6 @@ The octomap viewer **octovis** can be compiled and used under Windows although this has not been tested in-depth. Feedback is welcome ("it works" is nice too :-)) -To compile the library you need: - -* OpenGL -* cmake (http://www.cmake.org) -* QT development environment (see below) - ### MinGW ### From d9697fa192ee0ff2a2263001c4bdef602d556499 Mon Sep 17 00:00:00 2001 From: Leopold Palomo-Avellaneda Date: Fri, 10 Jan 2020 11:03:19 +0100 Subject: [PATCH 4/4] Fix incorrect library name in dynamicEDT3D.pc --- dynamicEDT3D/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynamicEDT3D/CMakeLists.txt b/dynamicEDT3D/CMakeLists.txt index f1479cb0..3995a2bb 100644 --- a/dynamicEDT3D/CMakeLists.txt +++ b/dynamicEDT3D/CMakeLists.txt @@ -147,7 +147,7 @@ install(FILES include(InstallPkgConfigFile) install_pkg_config_file(dynamicEDT3D CFLAGS - LIBS -ldynamicEDT3D + LIBS -ldynamicedt3d REQUIRES VERSION ${DYNAMICEDT3D_VERSION})