From 7d45c924aafb5213384eff9d2082b9b60d4a507a Mon Sep 17 00:00:00 2001 From: Erwin Janssen Date: Wed, 5 Apr 2017 22:35:21 +0200 Subject: [PATCH] Add tools from cmd/tools to CMake build The directory cmd/tools contains multiple command line tools, these are added to the CMake build. Because most tools shared some or most of their settings, a CMake function could be used to set most of these settings. --- cmake/modify_gml2gv_gmlparse.cmake.in | 11 ++ cmake/modify_gml2gv_gmlscan.cmake.in | 3 + cmd/CMakeLists.txt | 1 + cmd/dot/CMakeLists.txt | 2 +- cmd/tools/CMakeLists.txt | 270 ++++++++++++++++++++++++++ 5 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 cmake/modify_gml2gv_gmlparse.cmake.in create mode 100644 cmake/modify_gml2gv_gmlscan.cmake.in create mode 100644 cmd/tools/CMakeLists.txt diff --git a/cmake/modify_gml2gv_gmlparse.cmake.in b/cmake/modify_gml2gv_gmlparse.cmake.in new file mode 100644 index 000000000..c68fb5297 --- /dev/null +++ b/cmake/modify_gml2gv_gmlparse.cmake.in @@ -0,0 +1,11 @@ +file(READ @CMAKE_CURRENT_BINARY_DIR@/gmlparse.h file_contents) +string(REPLACE "yy" "gml" file_contents "${file_contents}") +string(REPLACE "unsigned long int" "uint_64_t" file_contents "${file_contents}") +string(REPLACE "unsigned long" "uint_64_t" file_contents "${file_contents}") +file(WRITE @CMAKE_CURRENT_BINARY_DIR@/gmlparse.h "${file_contents}") + +file(READ @CMAKE_CURRENT_BINARY_DIR@/gmlparse.c file_contents) +string(REPLACE "yy" "gml" file_contents "${file_contents}") +string(REPLACE "unsigned long int" "uint_64_t" file_contents "${file_contents}") +string(REPLACE "unsigned long" "uint_64_t" file_contents "${file_contents}") +file(WRITE @CMAKE_CURRENT_BINARY_DIR@/gmlparse.c "${file_contents}") diff --git a/cmake/modify_gml2gv_gmlscan.cmake.in b/cmake/modify_gml2gv_gmlscan.cmake.in new file mode 100644 index 000000000..23f60c469 --- /dev/null +++ b/cmake/modify_gml2gv_gmlscan.cmake.in @@ -0,0 +1,3 @@ +file(READ @CMAKE_CURRENT_BINARY_DIR@/gmlscan.c file_contents) +string(REPLACE "yy" "gml" file_contents "${file_contents}") +file(WRITE @CMAKE_CURRENT_BINARY_DIR@/gmlscan.c "${file_contents}") diff --git a/cmd/CMakeLists.txt b/cmd/CMakeLists.txt index e05981ed8..6bc0d7c40 100644 --- a/cmd/CMakeLists.txt +++ b/cmd/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(dot) +add_subdirectory(tools) diff --git a/cmd/dot/CMakeLists.txt b/cmd/dot/CMakeLists.txt index 017b35f04..78640068b 100644 --- a/cmd/dot/CMakeLists.txt +++ b/cmd/dot/CMakeLists.txt @@ -26,7 +26,7 @@ if (UNIX) target_link_libraries(dot m) endif (UNIX) -# Installation location of library files +# Installation location of executables install( TARGETS dot RUNTIME DESTINATION ${BINARY_INSTALL_DIR} diff --git a/cmd/tools/CMakeLists.txt b/cmd/tools/CMakeLists.txt new file mode 100644 index 000000000..8efe75ff4 --- /dev/null +++ b/cmd/tools/CMakeLists.txt @@ -0,0 +1,270 @@ +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${TOP_SOURCE_DIR}/windows/getopt + ${GRAPHVIZ_LIB_DIR}/cdt + ${GRAPHVIZ_LIB_DIR}/cgraph + ${GRAPHVIZ_LIB_DIR}/common + ${GRAPHVIZ_LIB_DIR}/gvc + ${GRAPHVIZ_LIB_DIR}/ingraphs + ${GRAPHVIZ_LIB_DIR}/neatogen + ${GRAPHVIZ_LIB_DIR}/pack + ${GRAPHVIZ_LIB_DIR}/pathplan + ${GRAPHVIZ_LIB_DIR}/sparse + ${EXPAT_INCLUDE_DIRS} +) + +# This function sets some default values that every tools shares: +# - linking to getopt if REQUIRED +# - installation of executable +# - installation of manpage +function(tool_defaults name) + if(NOT HAVE_GETOPT_H) + target_link_libraries(${name} getopt) + endif(NOT HAVE_GETOPT_H) + + install( + TARGETS ${name} + RUNTIME DESTINATION ${BINARY_INSTALL_DIR} + ) + + install( + FILES ${name}.1 + DESTINATION ${MAN_INSTALL_DIR} + ) +endfunction(tool_defaults) + +# ================================ simple tools ================================ +# These tools have a single source file and share linked libraries, etc. + +# This function adds a simple tool using only it's name +function(add_simple_tool name) + add_executable(${name} ${name}.c) + + target_link_libraries(${name} + cgraph + ingraphs + ) + + tool_defaults(${name}) +endfunction(add_simple_tool) + +add_simple_tool(acyclic) +add_simple_tool(bcomps) +add_simple_tool(ccomps) +add_simple_tool(gc) +add_simple_tool(nop) +add_simple_tool(tred) +add_simple_tool(unflatten) + +# ================================ complex tools =============================== +# These tools have multiple source files, different dependencies or other +# differences from the simple tools above + +# ================================== dijkstra ================================== +add_executable(dijkstra + # Source files + dijkstra.c +) + +target_link_libraries(dijkstra + cdt + cgraph + ingraphs +) + +tool_defaults(dijkstra) + +# =================================== gml2gv =================================== +BISON_TARGET(Gmlparse gmlparse.y ${CMAKE_CURRENT_BINARY_DIR}/gmlparse.c) +FLEX_TARGET(Gmlscan gmlscan.l ${CMAKE_CURRENT_BINARY_DIR}/gmlscan.c) +ADD_FLEX_BISON_DEPENDENCY(Gmlscan Gmlparse) + +# Modify files generated by Bison and Flex, to match the Autotools build. +# - Replace "yy" with "gml" in all three files +# - Replace "unsigned long int" with "uint64_t" in gmlparse.h and gmlparse.c +# - Replace "unsigned long" with "uint64_t" in gmlparse.h and gmlparse.c +configure_file( + "${TOP_SOURCE_DIR}/cmake/modify_gml2gv_gmlparse.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlparse.cmake" + @ONLY +) +configure_file( + "${TOP_SOURCE_DIR}/cmake/modify_gml2gv_gmlscan.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlscan.cmake" + @ONLY +) +add_custom_command( + OUTPUT ${BISON_Gmlparse_OUTPUTS} + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlparse.cmake + APPEND +) +add_custom_command( + OUTPUT ${FLEX_Gmlscan_OUTPUTS} + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlscan.cmake + APPEND +) + +add_executable(gml2gv + # Source files + gml2gv.c + + # Generated files + ${BISON_Gmlparse_OUTPUTS} + ${FLEX_Gmlscan_OUTPUTS} +) + +target_link_libraries(gml2gv + cgraph + ingraphs +) + +tool_defaults(gml2gv) + +# ================================= graphml2gv ================================= +if(EXPAT_FOUND) + +add_executable(graphml2gv + # Source files + graphml2gv.c +) + +target_link_libraries(graphml2gv + cdt + cgraph + ingraphs + ${EXPAT_LIBRARIES} +) + +tool_defaults(graphml2gv) + +endif(EXPAT_FOUND) + +# ================================== gvcolor =================================== +add_executable(gvcolor + # Header files + colortbl.h + + # Source files + colxlate.c + gvcolor.c +) + +target_link_libraries(gvcolor + cgraph + ingraphs +) + +tool_defaults(gvcolor) + +# ==================================== gvgen =================================== +add_executable(gvgen + # Source files + graph_generator.c + gvgen.c +) + +target_link_libraries(gvgen cgraph) + +# Link to math library +if (UNIX) + target_link_libraries(gvgen m) +endif (UNIX) + +tool_defaults(gvgen) + +# =================================== gvpack =================================== +# TODO add gvpack_static + +add_definitions(-DDEMAND_LOADING=0) + +add_executable(gvpack + # Source files + gvpack.c +) + +target_link_libraries(gvpack + cdt + cgraph + gvc + gvplugin_neato_layout + ingraphs +) + +# Link to math library +if (UNIX) + target_link_libraries(gvpack m) +endif (UNIX) + +tool_defaults(gvpack) + +# =================================== gxl2gv =================================== +if(EXPAT_FOUND) + +add_executable(gxl2gv + # Source files + cvtgxl.c + gv2gxl.c + gxl2gv.c +) + +target_link_libraries(gxl2gv + cdt + cgraph + ingraphs + ${EXPAT_LIBRARIES} +) + +tool_defaults(gxl2gv) + +endif(EXPAT_FOUND) + +# ==================================== mm2gv =================================== +add_executable(mm2gv + # Source files + matrix_market.c + mm2gv.c + mmio.c +) + +target_link_libraries(mm2gv + cgraph + common + gvc + pathplan + sparse +) + +# Link to math library +if (UNIX) + target_link_libraries(mm2gv m) +endif (UNIX) + +tool_defaults(mm2gv) + +# =================================== sccmap =================================== +if(EXPAT_FOUND) + +add_executable(sccmap + # Source files + sccmap.c +) + +target_link_libraries(sccmap + cgraph + ingraphs + ${EXPAT_LIBRARIES} +) + +tool_defaults(sccmap) + +endif(EXPAT_FOUND) + +# ===================== Install third party DLLs on Windows ==================== + +if (WIN32 AND EXPAT_FOUND) + install( + FILES ${EXPAT_RUNTIME_LIBRARIES} + DESTINATION ${BINARY_INSTALL_DIR} + ) +endif(WIN32 AND EXPAT_FOUND) -- 2.49.0