Skip to content

Commit

Permalink
add optional dependency on graphviz
Browse files Browse the repository at this point in the history
  • Loading branch information
modass committed Sep 22, 2021
1 parent 03aa659 commit c4c052b
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 6 deletions.
83 changes: 83 additions & 0 deletions cmake/Modules/FindGraphviz.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# - Try to find Graphviz
# Once done this will define
#
# GRAPHVIZ_FOUND - system has Graphviz
# GRAPHVIZ_INCLUDE_DIRS - Graphviz include directories
# GRAPHVIZ_CDT_LIBRARY - Graphviz CDT library
# GRAPHVIZ_GVC_LIBRARY - Graphviz GVC library
# GRAPHVIZ_CGRAPH_LIBRARY - Graphviz CGRAPH library
# GRAPHVIZ_PATHPLAN_LIBRARY - Graphviz PATHPLAN library
# GRAPHVIZ_VERSION - Graphviz version
#
# This module reads hints about search locations from the following cmake variables:
# GRAPHVIZ_ROOT - Graphviz installation prefix
# (containing bin/, include/, etc.)

# Copyright (c) 2009, Adrien Bustany, <[email protected]>
# Copyright (c) 2013-2014 Kevin Funk <[email protected]>

# Version computation and some cleanups by Allen Winter <[email protected]>
# Copyright (c) 2012-2014 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>

# Simplified script by Dogan Can <[email protected]>
# Copyright (c) 2014 University of Southern California

# Redistribution and use is allowed according to the terms of the GPLv3+ license.


if (GRAPHVIZ_ROOT)
set(_GRAPHVIZ_INCLUDE_DIR ${GRAPHVIZ_ROOT}/include)
set(_GRAPHVIZ_LIBRARY_DIR ${GRAPHVIZ_ROOT}/lib)
endif ()

find_path(GRAPHVIZ_INCLUDE_DIR NAMES graphviz/cgraph.h
HINTS ${_GRAPHVIZ_INCLUDE_DIR})
find_library(GRAPHVIZ_CDT_LIBRARY NAMES cdt
HINTS ${_GRAPHVIZ_LIBRARY_DIR})
find_library(GRAPHVIZ_GVC_LIBRARY NAMES gvc
HINTS ${_GRAPHVIZ_LIBRARY_DIR})
find_library(GRAPHVIZ_CGRAPH_LIBRARY NAMES cgraph
HINTS ${_GRAPHVIZ_LIBRARY_DIR})
find_library(GRAPHVIZ_PATHPLAN_LIBRARY NAMES pathplan
HINTS ${_GRAPHVIZ_LIBRARY_DIR})

if (GRAPHVIZ_INCLUDE_DIR AND GRAPHVIZ_CDT_LIBRARY AND GRAPHVIZ_GVC_LIBRARY
AND GRAPHVIZ_CGRAPH_LIBRARY AND GRAPHVIZ_PATHPLAN_LIBRARY)
set(GRAPHVIZ_FOUND TRUE)
else ()
set(GRAPHVIZ_FOUND FALSE)
endif ()

# Ok, now compute the version
if (GRAPHVIZ_FOUND)
set(FIND_GRAPHVIZ_VERSION_SOURCE
"#include <graphviz/graphviz_version.h>\n#include <stdio.h>\n int main()\n {\n printf(\"%s\",PACKAGE_VERSION);return 1;\n }\n")
set(FIND_GRAPHVIZ_VERSION_SOURCE_FILE ${CMAKE_BINARY_DIR}/CMakeTmp/FindGRAPHVIZ.cxx)
file(WRITE "${FIND_GRAPHVIZ_VERSION_SOURCE_FILE}" "${FIND_GRAPHVIZ_VERSION_SOURCE}")

set(FIND_GRAPHVIZ_VERSION_ADD_INCLUDES
"-DINCLUDE_DIRECTORIES:STRING=${GRAPHVIZ_INCLUDE_DIR}")

try_run(RUN_RESULT COMPILE_RESULT
${CMAKE_BINARY_DIR}
${FIND_GRAPHVIZ_VERSION_SOURCE_FILE}
CMAKE_FLAGS "${FIND_GRAPHVIZ_VERSION_ADD_INCLUDES}"
RUN_OUTPUT_VARIABLE GRAPHVIZ_VERSION)

if (COMPILE_RESULT AND RUN_RESULT EQUAL 1)
message(STATUS "Graphviz version: ${GRAPHVIZ_VERSION}")
else ()
message(FATAL_ERROR "Unable to compile or run the graphviz version detection program.")
endif ()

set(GRAPHVIZ_INCLUDE_DIRS ${GRAPHVIZ_INCLUDE_DIR} ${GRAPHVIZ_INCLUDE_DIR}/graphviz)

if (NOT Graphviz_FIND_QUIETLY)
message(STATUS "Graphviz include: ${GRAPHVIZ_INCLUDE_DIRS}")
message(STATUS "Graphviz libraries: ${GRAPHVIZ_CDT_LIBRARY} ${GRAPHVIZ_GVC_LIBRARY} ${GRAPHVIZ_CGRAPH_LIBRARY} ${GRAPHVIZ_PATHPLAN_LIBRARY}")
endif ()
endif ()

if (Graphviz_FIND_REQUIRED AND NOT GRAPHVIZ_FOUND)
message(FATAL_ERROR "Could not find GraphViz.")
endif ()
14 changes: 9 additions & 5 deletions cmake/export.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,25 @@ if(HYPRO_USE_SMTRAT)
export_target(DEPENDENT_TARGETS smtrat-module-LRAModule-shared)
export_target(DEPENDENT_TARGETS smtrat-solver-static)
export_target(DEPENDENT_TARGETS smtrat-module-LRAModule-static)
endif()
endif ()
if (HYPRO_USE_Z3)
export_target(DEPENDENT_TARGETS z3_SHARED)
endif ()
if(HYPRO_GSL_INTEGRATION)
if (HYPRO_GSL_INTEGRATION)
export_target(DEPENDENT_TARGETS GSL_SHARED)
export_target(DEPENDENT_TARGETS GSL_STATIC)
endif()
endif ()
if (HYPRO_HAS_GRAPHVIZ)
export_target(DEPENDENT_TARGETS CGRAPH_SHARED)
export_target(DEPENDENT_TARGETS GVC_SHARED)
endif ()


include(CMakePackageConfigHelpers)

write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/hyproConfigVersion.cmake
VERSION ${hypro_VERSION}
COMPATIBILITY SameMajorVersion )
VERSION ${hypro_VERSION}
COMPATIBILITY SameMajorVersion)

set(TARGET ${PROJECT_NAME})

Expand Down
1 change: 1 addition & 0 deletions include/hypro/flags.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#cmakedefine HYPRO_USE_CLP
#cmakedefine HYPRO_USE_GLPK
#cmakedefine HYPRO_GSL_INTEGRATION
#cmakedefine HYPRO_HAS_GRAPHVIZ
#cmakedefine HYPRO_USE_PPL
#cmakedefine HYPRO_USE_OPENMP
#cmakedefine HYPRO_USE_SMTRAT
Expand Down
5 changes: 4 additions & 1 deletion resources/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -193,4 +193,7 @@ if (HYPRO_GSL_INTEGRATION)
#endif()
endif ()

set(DEPENDENT_TARGETS ${DEPENDENT_TARGETS} PARENT_SCOPE)
# try finding graphviz - required for ReachTree plotting
include(graphviz.cmake)

set(DEPENDENT_TARGETS ${DEPENDENT_TARGETS} PARENT_SCOPE)
30 changes: 30 additions & 0 deletions resources/graphviz.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

find_package(Graphviz)

if (${GRAPHVIZ_FOUND})
set(HYPRO_HAS_GRAPHVIZ ON PARENT_SCOPE)
endif ()

add_imported_library(CGRAPH SHARED
"${GRAPHVIZ_CGRAPH_LIBRARY}"
"${GRAPHVIZ_INCLUDE_DIRS}")
add_imported_library(GVC SHARED
"${GRAPHVIZ_GVC_LIBRARY}"
"${GRAPHVIZ_INCLUDE_DIRS}")

add_dependencies(hypro_resources CGRAPH_SHARED GVC_SHARED)

target_link_libraries(${PROJECT_NAME}-shared PUBLIC CGRAPH_SHARED GVC_SHARED)
target_link_libraries(${PROJECT_NAME}-static PUBLIC CGRAPH_SHARED GVC_SHARED)

target_include_directories(${PROJECT_NAME}-objects
PRIVATE ${GRAPHVIZ_INCLUDE_DIRS}
)
target_include_directories(${PROJECT_NAME}-static
PRIVATE ${GRAPHVIZ_INCLUDE_DIRS}
)
target_include_directories(${PROJECT_NAME}-shared
PRIVATE ${GRAPHVIZ_INCLUDE_DIRS}
)

list(APPEND ${PROJECT_NAME}_INCLUDE_DIRS ${GRAPHVIZ_INCLUDE_DIRS})

0 comments on commit c4c052b

Please sign in to comment.