From 6a8c5e6530806176acb8cea8e2bbaf733a4719d4 Mon Sep 17 00:00:00 2001 From: navarrop Date: Wed, 17 Nov 2010 12:53:29 +0000 Subject: [PATCH] Fix problem with detection of graphviz. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8565 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- buildtools/Cmake/CompleteInFiles.cmake | 75 ++++++++++++------ buildtools/Cmake/DefinePackages.cmake | 9 +-- buildtools/Cmake/MakeExeLib.cmake | 16 +++- buildtools/Cmake/Modules/FindGraphviz.cmake | 87 +++++++++++++++++++++ buildtools/Cmake/Option.cmake | 13 ++- buildtools/Cmake/PrintArgs.cmake | 14 +++- buildtools/Cmake/gras_config.h.in | 6 ++ src/simdag/sd_dotloader.c | 40 ++++++++-- 8 files changed, 220 insertions(+), 40 deletions(-) create mode 100644 buildtools/Cmake/Modules/FindGraphviz.cmake diff --git a/buildtools/Cmake/CompleteInFiles.cmake b/buildtools/Cmake/CompleteInFiles.cmake index f2466978cf..5bde0268f9 100644 --- a/buildtools/Cmake/CompleteInFiles.cmake +++ b/buildtools/Cmake/CompleteInFiles.cmake @@ -1,16 +1,18 @@ +set(CMAKE_MODULE_PATH +${CMAKE_MODULE_PATH} +${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Modules +) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckLibraryExists) include(TestBigEndian) - +if(enable_graphviz) +include(FindGraphviz) +endif(enable_graphviz) TEST_BIG_ENDIAN(BIGENDIAN) # Checks for header libraries functions. - -find_library(HAVE_CGRAPH_LIB cgraph) -find_file(HAVE_CGRAPH_H graphviz/cgraph.h) - CHECK_LIBRARY_EXISTS(pthread pthread_create NO_DEFAULT_PATHS pthread) CHECK_LIBRARY_EXISTS(pthread sem_init NO_DEFAULT_PATHS HAVE_SEM_INIT_LIB) CHECK_LIBRARY_EXISTS(pthread sem_timedwait NO_DEFAULT_PATHS HAVE_SEM_TIMEDWAIT_LIB) @@ -189,23 +191,52 @@ endif(NOT enable_gtnets OR enable_supernovae) #-------------------------------------------------------------------------------------------------- ### Initialize of cgraph -mark_as_advanced(HAVE_CGRAPH_LIB) -mark_as_advanced(HAVE_CGRAPH_H) - -if(HAVE_CGRAPH_LIB AND HAVE_CGRAPH_H) - string(REGEX REPLACE "/libcgraph.*" "" lib_cgraph ${HAVE_CGRAPH_LIB}) - string(REPLACE "/cgraph.h" "" file_cgraph_h ${HAVE_CGRAPH_H}) - string(REGEX MATCH "-I${file_cgraph_h} " operation "${CMAKE_C_FLAGS}") - if(NOT operation) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${file_cgraph_h} ") - endif(NOT operation) - string(REGEX MATCH "-L${lib_cgraph} " operation "${CMAKE_C_FLAGS}") - if(NOT operation) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${lib_cgraph} ") - endif(NOT operation) - -endif(HAVE_CGRAPH_LIB AND HAVE_CGRAPH_H) - +if(enable_graphviz AND HAVE_CDT_LIB) +if(HAVE_CGRAPH_LIB OR HAVE_AGRAPH_LIB) + + if(HAVE_AGRAPH_LIB) + string(REGEX REPLACE "/libagraph.*" "" lib_graphviz ${HAVE_AGRAPH_LIB}) + else(HAVE_AGRAPH_LIB) + if(HAVE_CGRAPH_LIB) + string(REGEX REPLACE "/libcgraph.*" "" lib_graphviz ${HAVE_CGRAPH_LIB}) + endif(HAVE_CGRAPH_LIB) + endif(HAVE_AGRAPH_LIB) + + if(HAVE_GRAPH_H OR HAVE_AGRAPH_H OR HAVE_CGRAPH_H) + + if(HAVE_GRAPH_H) + string(REPLACE "/graphviz" "" file_graphviz_h ${HAVE_GRAPH_H}) + set(GRAPH_H 1) + endif(HAVE_GRAPH_H) + + if(HAVE_AGRAPH_H) + string(REPLACE "/graphviz" "" file_graphviz_h ${HAVE_AGRAPH_H}) + set(AGRAPH_H 1) + endif(HAVE_AGRAPH_H) + + if(HAVE_CGRAPH_H) + string(REPLACE "/graphviz" "" file_graphviz_h ${HAVE_CGRAPH_H}) + set(CGRAPH_H 1) + endif(HAVE_CGRAPH_H) + + string(REGEX MATCH "-I${file_graphviz_h} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${file_graphviz_h} ") + endif(NOT operation) + + string(REGEX MATCH "-I${file_graphviz_h}/graphviz " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${file_graphviz_h}/graphviz ") + endif(NOT operation) + + string(REGEX MATCH "-L${lib_graphviz} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${lib_graphviz} ") + endif(NOT operation) + + endif(HAVE_GRAPH_H OR HAVE_AGRAPH_H OR HAVE_CGRAPH_H) +endif(HAVE_CGRAPH_LIB OR HAVE_AGRAPH_LIB) +endif(enable_graphviz AND HAVE_CDT_LIB) #-------------------------------------------------------------------------------------------------- ### Initialize of pcre find_library(PATH_PCRE_LIB pcre) diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index 2e0dcac5ad..9019eaa3eb 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -268,13 +268,12 @@ set(SIMDAG_SRC src/simdag/sd_workstation.c src/simdag/sd_daxloader.c ) -if(HAVE_CGRAPH_H) - set(SIMDAG_SRC - ${SIMDAG_SRC} +if(GRAPH_H OR AGRAPH_H OR CGRAPH_H) + set(SIMDAG_SRC + ${SIMDAG_SRC} src/simdag/sd_dotloader.c ) - -endif(HAVE_CGRAPH_H) +endif(GRAPH_H OR AGRAPH_H OR CGRAPH_H) set(GRAS_COMMON_SRC src/gras/gras.c diff --git a/buildtools/Cmake/MakeExeLib.cmake b/buildtools/Cmake/MakeExeLib.cmake index 10c9e318ce..c914951a6a 100644 --- a/buildtools/Cmake/MakeExeLib.cmake +++ b/buildtools/Cmake/MakeExeLib.cmake @@ -80,9 +80,19 @@ if(HAVE_LUA) ) endif(HAVE_LUA) -if(HAVE_CGRAPH_LIB AND HAVE_CGRAPH_H) - SET(SIMGRID_DEP "${SIMGRID_DEP} -lcgraph") -endif(HAVE_CGRAPH_LIB AND HAVE_CGRAPH_H) +if(enable_graphviz AND HAVE_CDT_LIB) +if(HAVE_AGRAPH_H OR HAVE_CGRAPH_H) + + if(HAVE_CGRAPH_LIB) + SET(SIMGRID_DEP "${SIMGRID_DEP} -lcgraph") + else(HAVE_CGRAPH_LIB) + if(HAVE_AGRAPH_LIB) + SET(SIMGRID_DEP "${SIMGRID_DEP} -lagraph -lcdt") + endif(HAVE_AGRAPH_LIB) + endif(HAVE_CGRAPH_LIB) + +endif(HAVE_AGRAPH_H OR HAVE_CGRAPH_H) +endif(enable_graphviz AND HAVE_CDT_LIB) if(HAVE_GTNETS) SET(SIMGRID_DEP "${SIMGRID_DEP} -lgtnets") diff --git a/buildtools/Cmake/Modules/FindGraphviz.cmake b/buildtools/Cmake/Modules/FindGraphviz.cmake new file mode 100644 index 0000000000..d9691b9367 --- /dev/null +++ b/buildtools/Cmake/Modules/FindGraphviz.cmake @@ -0,0 +1,87 @@ +find_path(HAVE_CGRAPH_H cgraph.h + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES include/graphviz include + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) + +find_path(HAVE_AGRAPH_H agraph.h + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES include/graphviz include + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) + +find_path(HAVE_GRAPH_H graph.h + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES include/graphviz include + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) + +find_library(HAVE_CGRAPH_LIB + NAME cgraph + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES lib/graphviz lib + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) + +find_library(HAVE_AGRAPH_LIB + NAME agraph + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES lib/graphviz lib + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) + +find_library(HAVE_GRAPH_LIB + NAME graph + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES lib/graphviz lib + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) + +find_library(HAVE_CDT_LIB + NAME cdt + HINTS + $ENV{LD_LIBRARY_PATH} + PATH_SUFFIXES lib/graphviz lib + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr +) \ No newline at end of file diff --git a/buildtools/Cmake/Option.cmake b/buildtools/Cmake/Option.cmake index fff78d3060..dd79d0215f 100644 --- a/buildtools/Cmake/Option.cmake +++ b/buildtools/Cmake/Option.cmake @@ -40,6 +40,7 @@ option(enable_memcheck "Enable memcheck." off) option(enable_print_message "Enable print message during config." off) option(enable_model-checking "" off) option(enable_lib_static "" off) +option(enable_graphviz "" off) if(WIN32) #actually not enable with windows message("Mode supernovae and maintainer disable with Windows.") @@ -90,4 +91,14 @@ mark_as_advanced(SED_EXE) mark_as_advanced(SVN) mark_as_advanced(GIT) mark_as_advanced(VALGRIND_PATH) -mark_as_advanced(PATH_PCRE_H) \ No newline at end of file +mark_as_advanced(PATH_PCRE_H) +mark_as_advanced(CMAKE_OSX_ARCHITECTURES) +mark_as_advanced(CMAKE_OSX_DEPLOYMENT_TARGET) +mark_as_advanced(CMAKE_OSX_SYSROOT) +mark_as_advanced(HAVE_AGRAPH_H) +mark_as_advanced(HAVE_CGRAPH_H) +mark_as_advanced(HAVE_GRAPH_H) +mark_as_advanced(HAVE_GRAPH_LIB) +mark_as_advanced(HAVE_CGRAPH_LIB) +mark_as_advanced(HAVE_AGRAPH_LIB) +mark_as_advanced(HAVE_CDT_LIB) \ No newline at end of file diff --git a/buildtools/Cmake/PrintArgs.cmake b/buildtools/Cmake/PrintArgs.cmake index 80036757e0..29db58e78a 100644 --- a/buildtools/Cmake/PrintArgs.cmake +++ b/buildtools/Cmake/PrintArgs.cmake @@ -128,9 +128,16 @@ if(enable_print_message) message("SED : ${SED_EXE}") message("PERL : ${PERL_EXECUTABLE}") endif(enable_maintainer_mode) - message("") - message("libcgraph : ${HAVE_CGRAPH_LIB}") - message("cgraph.h : ${HAVE_CGRAPH_H}") + if(enable_graphviz) + message("") + message("libcdt : ${HAVE_CDT_LIB}") + message("libagraph : ${HAVE_AGRAPH_LIB}") + message("agraph.h : ${HAVE_AGRAPH_H}") + message("libcgraph : ${HAVE_CGRAPH_LIB}") + message("cgraph.h : ${HAVE_CGRAPH_H}") + message("libgraph : ${HAVE_GRAPH_LIB}") + message("graph.h : ${HAVE_GRAPH_H}") + endif(enable_graphviz) if(pipol_user) message("") message("ssh: ${HAVE_SSH}") @@ -177,6 +184,7 @@ message(" Supernovae mode: ${enable_supernovae}") message(" Tracing mode : ${enable_tracing}") message(" Latency bound : ${enable_latency_bound_tracking}") message(" Model checking : ${enable_model-checking}") +message(" Graphviz mode : ${enable_graphviz}") message(" Build SG doc : ${enable_doc}") message("") message(" Simgrid dependencies: ${SIMGRID_DEP}") diff --git a/buildtools/Cmake/gras_config.h.in b/buildtools/Cmake/gras_config.h.in index 3f5468facd..0d9f3dc101 100644 --- a/buildtools/Cmake/gras_config.h.in +++ b/buildtools/Cmake/gras_config.h.in @@ -39,6 +39,12 @@ /* Set to true if lib pcre is present */ #cmakedefine HAVE_PCRE_LIB @HAVE_PCRE_LIB@ +/* Some variable for graphviz */ +#cmakedefine HAVE_GRAPH_H @GRAPH_H@ +#cmakedefine HAVE_CGRAPH_H @CGRAPH_H@ +#cmakedefine HAVE_AGRAPH_H @AGRAPH_H@ + + /* Define if building universal (internal helper macro) */ #cmakedefine AC_APPLE_UNIVERSAL_BUILD @AC_APPLE_UNIVERSAL_BUILD@ diff --git a/src/simdag/sd_dotloader.c b/src/simdag/sd_dotloader.c index 0621f4be66..1381292357 100644 --- a/src/simdag/sd_dotloader.c +++ b/src/simdag/sd_dotloader.c @@ -12,7 +12,18 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_dotparse, sd, "Parsing DOT files"); #undef CLEANUP -#include + +#ifdef HAVE_AGRAPH_H + #include +#else + #ifdef HAVE_GRAPH_H + #include + #else + #ifdef HAVE_CGRAPH_H + #include + #endif + #endif +#endif void dot_add_task(Agnode_t * dag_node); void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge); @@ -114,8 +125,13 @@ xbt_dynar_t SD_dotload_FILE(FILE * in_file) Agnode_t *dag_node = NULL; for (dag_node = agfstnode(dag_dot); dag_node; + #ifdef HAVE_CGRAPH_H dag_node = agnxtnode(dag_dot, dag_node)) { - dot_add_task(dag_node); + #endif + #ifdef HAVE_AGRAPH_H + dag_node = agnxtnode(dag_node)) { + #endif + dot_add_task(dag_node); } agclose(dag_dot); xbt_dict_free(&jobs); @@ -199,15 +215,27 @@ void dot_add_task(Agnode_t * dag_node) } Agedge_t *e; int count = 0; - for (e = agfstin(dag_dot, dag_node); e; e = agnxtin(dag_dot, e)) { - dot_add_input_dependencies(current_job, e); - count++; + + #ifdef HAVE_CGRAPH_H + for (e = agfstin(dag_dot, dag_node); e; e = agnxtin(dag_dot, e)) { + #endif + #ifdef HAVE_AGRAPH_H + for (e = agfstin(dag_node); e; e = agnxtin(e)) { + #endif + dot_add_input_dependencies(current_job, e); + count++; } if (count == 0 && current_job != root_task) { SD_task_dependency_add(NULL, NULL, root_task, current_job); } count = 0; - for (e = agfstout(dag_dot, dag_node); e; e = agnxtout(dag_dot, e)) { + #ifdef HAVE_CGRAPH_H + for (e = agfstout(dag_dot, dag_node); e; e = agnxtout(dag_dot, e)) { + #endif + #ifdef HAVE_AGRAPH_H + for (e = agfstout(dag_node); e; e = agnxtout(e)) { + #endif + dot_add_output_dependencies(current_job, e); count++; } -- 2.20.1