aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/graphviz
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/graphviz')
-rw-r--r--vcpkg/ports/graphviz/cmake-project-include.cmake10
-rw-r--r--vcpkg/ports/graphviz/disable-pragma-lib.patch36
-rw-r--r--vcpkg/ports/graphviz/fix-dependencies.patch151
-rw-r--r--vcpkg/ports/graphviz/no-absolute-paths.patch10
-rw-r--r--vcpkg/ports/graphviz/portfile.cmake156
-rw-r--r--vcpkg/ports/graphviz/select-plugins.patch20
-rw-r--r--vcpkg/ports/graphviz/static-linkage.patch39
-rw-r--r--vcpkg/ports/graphviz/vcpkg.json42
-rw-r--r--vcpkg/ports/graphviz/webp-install.patch13
-rw-r--r--vcpkg/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch12
10 files changed, 489 insertions, 0 deletions
diff --git a/vcpkg/ports/graphviz/cmake-project-include.cmake b/vcpkg/ports/graphviz/cmake-project-include.cmake
new file mode 100644
index 0000000..81a50f9
--- /dev/null
+++ b/vcpkg/ports/graphviz/cmake-project-include.cmake
@@ -0,0 +1,10 @@
+if(MSVC)
+ find_package(unofficial-getopt-win32 CONFIG REQUIRED)
+ set(GETOPT_LIBRARY "unofficial::getopt-win32::getopt" CACHE INTERNAL "vcpkg")
+ set(GETOPT_RUNTIME_LIBRARY "unused" CACHE INTERNAL "vcpkg")
+endif()
+
+if(MINGW AND BUILD_SHARED_LIBS AND NOT CMAKE_CROSSCOMPILING)
+ # Prevent running `configure_plugins.cmake`.
+ set(CMAKE_CROSSCOMPILING 1)
+endif()
diff --git a/vcpkg/ports/graphviz/disable-pragma-lib.patch b/vcpkg/ports/graphviz/disable-pragma-lib.patch
new file mode 100644
index 0000000..b7dd0c1
--- /dev/null
+++ b/vcpkg/ports/graphviz/disable-pragma-lib.patch
@@ -0,0 +1,36 @@
+diff --git a/cmd/gvedit/main.cpp b/cmd/gvedit/main.cpp
+index 98a2a4a..e810c36 100644
+--- a/cmd/gvedit/main.cpp
++++ b/cmd/gvedit/main.cpp
+@@ -30,6 +30,7 @@
+
+
+ #ifdef _MSC_VER
++#elif 0
+ #pragma comment( lib, "cgraph.lib" )
+ #pragma comment( lib, "gvc.lib" )
+ #endif
+diff --git a/plugin/gdk/gvloadimage_gdk.c b/plugin/gdk/gvloadimage_gdk.c
+index 84c6a6a..0d3ec64 100644
+--- a/plugin/gdk/gvloadimage_gdk.c
++++ b/plugin/gdk/gvloadimage_gdk.c
+@@ -22,6 +22,7 @@
+ #include <gdk/gdkcairo.h>
+
+ #ifdef _MSC_VER //*dependencies
++#elif 0
+ #pragma comment( lib, "gvc.lib" )
+ #pragma comment( lib, "glib-2.0.lib" )
+ #pragma comment( lib, "cairo.lib" )
+diff --git a/plugin/webp/gvloadimage_webp.c b/plugin/webp/gvloadimage_webp.c
+index c983556..446d43f 100644
+--- a/plugin/webp/gvloadimage_webp.c
++++ b/plugin/webp/gvloadimage_webp.c
+@@ -24,6 +24,7 @@
+ #include <webp/decode.h>
+
+ #ifdef _MSC_VER //*dependencies
++#elif 0
+ #pragma comment( lib, "gvc.lib" )
+ #pragma comment( lib, "glib-2.0.lib" )
+ #pragma comment( lib, "pango-1.0.lib" )
diff --git a/vcpkg/ports/graphviz/fix-dependencies.patch b/vcpkg/ports/graphviz/fix-dependencies.patch
new file mode 100644
index 0000000..72ccafe
--- /dev/null
+++ b/vcpkg/ports/graphviz/fix-dependencies.patch
@@ -0,0 +1,151 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 12fd424..11371df 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -185,12 +185,14 @@ find_package(PkgConfig)
+ if(PkgConfig_FOUND)
+ pkg_check_modules(GDK gdk-2.0)
+ pkg_check_modules(GDK_PIXBUF gdk-pixbuf-2.0)
+- pkg_check_modules(LASI lasi)
+- pkg_check_modules(POPPLER poppler-glib)
++ set(LASI_FOUND 0)
++ set(POPPLER_FOUND 0)
+ pkg_check_modules(RSVG librsvg-2.0)
+ pkg_check_modules(WEBP libwebp)
++ if(UNIX)
+ pkg_check_modules(X11 x11)
+ pkg_check_modules(XRENDER xrender)
++ endif()
+ else()
+ set(GDK_FOUND 0)
+ set(GDK_PIXBUF_FOUND 0)
+diff --git a/cmake/FindCAIRO.cmake b/cmake/FindCAIRO.cmake
+index 65bb42f..47949f6 100644
+--- a/cmake/FindCAIRO.cmake
++++ b/cmake/FindCAIRO.cmake
+@@ -1,6 +1,6 @@
+ include(FindPackageHandleStandardArgs)
+
+-if(WIN32)
++if(0)
+ find_path(
+ CAIRO_INCLUDE_DIR cairo.h
+ PATH_SUFFIXES cairo
+@@ -39,7 +39,9 @@ if(WIN32)
+ )
+ else()
+ find_package(PkgConfig)
+- pkg_check_modules(CAIRO cairo)
++ pkg_check_modules(CAIRO cairo IMPORTED_TARGET)
++ set(CAIRO_LIBRARIES PkgConfig::CAIRO)
++ set(CAIRO_LINK_LIBRARIES PkgConfig::CAIRO)
+
+ find_package_handle_standard_args(CAIRO DEFAULT_MSG
+ CAIRO_INCLUDE_DIRS
+diff --git a/cmake/FindGD.cmake b/cmake/FindGD.cmake
+index 0deb5e6..ef42889 100644
+--- a/cmake/FindGD.cmake
++++ b/cmake/FindGD.cmake
+@@ -1,3 +1,11 @@
++find_package(PkgConfig)
++pkg_check_modules(GD gdlib IMPORTED_TARGET)
++set(GD_LIBRARIES PkgConfig::GD)
++foreach(item IN ITEMS FONTCONFIG FREETYPE GIF JPEG PNG)
++ set(HAVE_GD_${item} 1)
++endforeach()
++return()
++
+ find_path(GD_INCLUDE_DIR gd.h)
+ find_library(GD_LIBRARY NAMES gd libgd)
+ find_program(GD_RUNTIME_LIBRARY libgd.dll)
+diff --git a/cmake/FindGTS.cmake b/cmake/FindGTS.cmake
+index 8e544e9..88dd849 100644
+--- a/cmake/FindGTS.cmake
++++ b/cmake/FindGTS.cmake
+@@ -1,5 +1,5 @@
+ include(FindPackageHandleStandardArgs)
+-if(WIN32)
++if(0)
+ find_path(GTS_INCLUDE_DIR gts.h)
+ find_path(GLIB_INCLUDE_DIR glib.h PATH_SUFFIXES glib-2.0)
+ find_path(GLIBCONFIG_INCLUDE_DIR glibconfig.h
+@@ -40,7 +40,8 @@ if(WIN32)
+ )
+ else()
+ find_package(PkgConfig)
+- pkg_check_modules(GTS gts)
++ pkg_check_modules(GTS gts IMPORTED_TARGET)
++ set(GTS_LINK_LIBRARIES PkgConfig::GTS)
+
+ find_package_handle_standard_args(GTS DEFAULT_MSG
+ GTS_INCLUDE_DIRS
+diff --git a/cmake/FindLTDL.cmake b/cmake/FindLTDL.cmake
+index e955b74..046e9e8 100644
+--- a/cmake/FindLTDL.cmake
++++ b/cmake/FindLTDL.cmake
+@@ -17,4 +17,7 @@ mark_as_advanced(LTDL_INCLUDE_DIR LTDL_LIBRARY)
+ set(LTDL_INCLUDE_DIRS ${LTDL_INCLUDE_DIR})
+ if(NOT WIN32 OR MINGW)
+ set(LTDL_LIBRARIES ${LTDL_LIBRARY})
++ if(CMAKE_DL_LIBS AND NOT BUILD_SHARED_LIBS)
++ set(LTDL_LIBRARIES "${LTDL_LIBRARIES};${CMAKE_DL_LIBS}")
++ endif()
+ endif()
+diff --git a/cmake/FindPANGOCAIRO.cmake b/cmake/FindPANGOCAIRO.cmake
+index b92e5be..01c4cc7 100644
+--- a/cmake/FindPANGOCAIRO.cmake
++++ b/cmake/FindPANGOCAIRO.cmake
+@@ -1,6 +1,6 @@
+ include(FindPackageHandleStandardArgs)
+
+-if(WIN32)
++if(0)
+ find_path(PANGOCAIRO_INCLUDE_DIR pango/pangocairo.h PATH_SUFFIXES pango-1.0)
+ find_path(GLIB_INCLUDE_DIR glib.h PATH_SUFFIXES glib-2.0)
+ find_path(GLIBCONFIG_INCLUDE_DIR glibconfig.h
+@@ -78,7 +78,9 @@ if(WIN32)
+ )
+ else()
+ find_package(PkgConfig)
+- pkg_check_modules(PANGOCAIRO pangocairo)
++ pkg_check_modules(PANGOCAIRO pangocairo IMPORTED_TARGET)
++ set(PANGOCAIRO_LIBRARIES PkgConfig::PANGOCAIRO)
++ set(PANGOCAIRO_LINK_LIBRARIES PkgConfig::PANGOCAIRO) # https://gitlab.kitware.com/cmake/cmake/-/issues/16154
+
+ find_package_handle_standard_args(PANGOCAIRO DEFAULT_MSG
+ PANGOCAIRO_INCLUDE_DIRS
+diff --git a/cmd/dot/CMakeLists.txt b/cmd/dot/CMakeLists.txt
+index d2ea435..3b068b0 100644
+--- a/cmd/dot/CMakeLists.txt
++++ b/cmd/dot/CMakeLists.txt
+@@ -146,7 +146,6 @@ endif()
+
+ find_package(PkgConfig)
+ if(PkgConfig_FOUND)
+- pkg_check_modules(GTS gts)
+ if(GTS_FOUND)
+ target_include_directories(dot SYSTEM PRIVATE ${GTS_INCLUDE_DIRS})
+ target_link_libraries(dot PRIVATE ${GTS_LINK_LIBRARIES})
+@@ -223,7 +222,7 @@ if(WEBP_FOUND)
+ endif()
+
+ find_library(SOCKET socket)
+-if(SOCKET)
++if(0)
+ target_link_libraries(dot PRIVATE ${SOCKET})
+ endif()
+
+diff --git a/lib/cdt/CMakeLists.txt b/lib/cdt/CMakeLists.txt
+index 4057b57..bf1a913 100644
+--- a/lib/cdt/CMakeLists.txt
++++ b/lib/cdt/CMakeLists.txt
+@@ -68,3 +68,9 @@ set_target_properties(cdt PROPERTIES
+ VERSION 5.0.0
+ SOVERSION 5
+ )
++
++set(THREADS_PREFER_PTHREAD_FLAG ON)
++find_package(Threads)
++if(TARGET Threads::Threads)
++ target_link_libraries(cdt Threads::Threads)
++endif()
diff --git a/vcpkg/ports/graphviz/no-absolute-paths.patch b/vcpkg/ports/graphviz/no-absolute-paths.patch
new file mode 100644
index 0000000..2f18d47
--- /dev/null
+++ b/vcpkg/ports/graphviz/no-absolute-paths.patch
@@ -0,0 +1,10 @@
+diff --git a/lib/gvc/CMakeLists.txt b/lib/gvc/CMakeLists.txt
+index b437bde..04fe8e8 100644
+--- a/lib/gvc/CMakeLists.txt
++++ b/lib/gvc/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-add_definitions(-DGVC_EXPORTS -DGVLIBDIR="${LIBRARY_INSTALL_DIR}/graphviz")
++add_definitions(-DGVC_EXPORTS -DGVLIBDIR="")
+
+ add_library(gvc
+ # Header files
diff --git a/vcpkg/ports/graphviz/portfile.cmake b/vcpkg/ports/graphviz/portfile.cmake
new file mode 100644
index 0000000..93c6a82
--- /dev/null
+++ b/vcpkg/ports/graphviz/portfile.cmake
@@ -0,0 +1,156 @@
+set(VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY enabled) # for plugins
+set(VCPKG_POLICY_DLLS_WITHOUT_EXPORTS enabled) # kitty and vt plugin not ready yet?
+
+vcpkg_from_gitlab(
+ GITLAB_URL https://gitlab.com
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO graphviz/graphviz
+ REF "${VERSION}"
+ SHA512 6b0cffaf4bde7df260894b1b9d74e8a1d5aec11736511a86d99bc369e3f8db99f7050ae917cf1a066cc7d87695a57ef5b9c19521d211fee48c8a0c41ad0f4aac
+ HEAD_REF main
+ PATCHES
+ disable-pragma-lib.patch
+ fix-dependencies.patch
+ no-absolute-paths.patch
+ select-plugins.patch
+ static-linkage.patch
+ webp-install.patch
+ workaround-insufficiently-ugly-wchar-h.patch # Avoids conflict between #define S and VS2022 17.13's <wchar.h>
+)
+
+vcpkg_list(SET OPTIONS)
+if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ vcpkg_download_distfile(
+ LTDL_H_PATH
+ URLS "https://gitlab.com/graphviz/graphviz-windows-dependencies/-/raw/141d3a21be904fa8dc2ae3ed01d36684db07a35d/x64/include/ltdl.h"
+ FILENAME graphviz-ltdl-141d3a21.h
+ SHA512 f2d20e849e35060536265f47014c40eb70e57dacd600a9db112fc465fbfa6a66217b44a8c3dc33039c260a27f09d9034b329b03cc28c32a22ec503fcd17b78cd
+ )
+ file(INSTALL "${LTDL_H_PATH}" DESTINATION "${SOURCE_PATH}/libltdl" RENAME ltdl.h)
+ vcpkg_list(APPEND OPTIONS "-DLTDL_INCLUDE_DIR=${SOURCE_PATH}/libltdl")
+endif()
+
+if(VCPKG_HOST_IS_WINDOWS)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES gawk)
+ vcpkg_add_to_path("${MSYS_ROOT}/usr/bin")
+ unset(ENV{MSYSTEM_PREFIX})
+endif()
+
+vcpkg_find_acquire_program(BISON)
+vcpkg_find_acquire_program(FLEX)
+vcpkg_find_acquire_program(GIT)
+vcpkg_find_acquire_program(PYTHON3)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ "-DVERSION=${VERSION}"
+ "-DBISON_EXECUTABLE=${BISON}"
+ "-DFLEX_EXECUTABLE=${FLEX}"
+ "-DGIT=${GIT}"
+ "-DPython3_EXECUTABLE=${PYTHON3}"
+ "-DPKG_CONFIG_EXECUTABLE=${CURRENT_HOST_INSTALLED_DIR}/tools/pkgconf/pkgconf"
+ "-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_LIST_DIR}/cmake-project-include.cmake"
+ -Dinstall_win_dependency_dlls=OFF
+ -Duse_win_pre_inst_libs=OFF
+ -Dwith_gvedit=OFF
+ -Dwith_smyrna=OFF
+ -DCMAKE_DISABLE_FIND_PACKAGE_ANN=ON
+ -DCMAKE_DISABLE_FIND_PACKAGE_DevIL=ON
+ -DCMAKE_REQUIRE_FIND_PACKAGE_CAIRO=ON
+ -DCMAKE_REQUIRE_FIND_PACKAGE_EXPAT=ON
+ -DCMAKE_REQUIRE_FIND_PACKAGE_GD=ON
+ -DCMAKE_REQUIRE_FIND_PACKAGE_LTDL=ON
+ -DCMAKE_REQUIRE_FIND_PACKAGE_PANGOCAIRO=ON
+ ${OPTIONS}
+ MAYBE_UNUSED_VARIABLES
+ install_win_dependency_dlls
+)
+vcpkg_cmake_install(ADD_BIN_TO_PATH)
+vcpkg_fixup_pkgconfig()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(GLOB headers "${CURRENT_PACKAGES_DIR}/include/graphviz/*.h")
+ foreach(file IN LISTS headers)
+ vcpkg_replace_string("${file}" "#ifdef GVDLL" "#if 1" IGNORE_UNCHANGED)
+ endforeach()
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ # static libs built with dllexport must be used with dllexport
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/cdt.h" "#ifdef EXPORT_CDT" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/cgraph.h" "#ifdef EXPORT_CGRAPH" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/gvc.h" "#ifdef GVC_EXPORTS" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/gvplugin_loadimage.h" "#ifdef GVC_EXPORTS" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/pack.h" "#ifdef GVC_EXPORTS" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/pathgeom.h" "#ifdef PATHPLAN_EXPORTS" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/pathplan.h" "#ifdef PATHPLAN_EXPORTS" "#if 1")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/graphviz/xdot.h" "#ifdef EXPORT_XDOT" "#if 1")
+ endif()
+endif()
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/debug/include"
+ "${CURRENT_PACKAGES_DIR}/debug/share"
+ "${CURRENT_PACKAGES_DIR}/share/man"
+)
+
+file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+foreach(script_or_link IN ITEMS "dot2gxl${VCPKG_TARGET_EXECUTABLE_SUFFIX}" gvmap.sh)
+ if(EXISTS "${CURRENT_PACKAGES_DIR}/bin/${script_or_link}")
+ file(RENAME "${CURRENT_PACKAGES_DIR}/bin/${script_or_link}" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/${script_or_link}")
+ file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/bin/${script_or_link}")
+ endif()
+endforeach()
+vcpkg_copy_tools(
+ TOOL_NAMES
+ acyclic
+ bcomps
+ ccomps
+ circo
+ cluster
+ diffimg
+ dijkstra
+ dot
+ edgepaint
+ fdp
+ gc
+ gml2gv
+ graphml2gv
+ gv2gml
+ gv2gxl
+ gvcolor
+ gvgen
+ gvmap
+ gvpack
+ gvpr
+ gxl2dot
+ gxl2gv
+ mm2gv
+ neato
+ nop
+ osage
+ patchwork
+ prune
+ sccmap
+ sfdp
+ tred
+ twopi
+ unflatten
+ AUTO_CLEAN
+)
+
+file(GLOB plugin_config "${CURRENT_PACKAGES_DIR}/lib/graphviz/config*" "${CURRENT_PACKAGES_DIR}/bin/config*")
+if(NOT plugin_config)
+ message(WARNING
+ "In order to create the plugin configuration file, "
+ "you must run `dot -c` on the target system."
+ )
+endif()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(GLOB plugins "${CURRENT_PACKAGES_DIR}/bin/gvplugin_*")
+ file(COPY ${plugins} ${plugin_config} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+else()
+ file(COPY "${CURRENT_PACKAGES_DIR}/lib/graphviz" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+endif()
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
diff --git a/vcpkg/ports/graphviz/select-plugins.patch b/vcpkg/ports/graphviz/select-plugins.patch
new file mode 100644
index 0000000..eea7749
--- /dev/null
+++ b/vcpkg/ports/graphviz/select-plugins.patch
@@ -0,0 +1,20 @@
+diff --git a/plugin/CMakeLists.txt b/plugin/CMakeLists.txt
+index c8cac8e..d14bf9c 100644
+--- a/plugin/CMakeLists.txt
++++ b/plugin/CMakeLists.txt
+@@ -1,15 +1,11 @@
+ add_subdirectory(core)
+-add_subdirectory(devil)
+ add_subdirectory(dot_layout)
+ add_subdirectory(gd)
+ add_subdirectory(gdiplus)
+ add_subdirectory(gdk)
+-add_subdirectory(gs)
+ add_subdirectory(kitty)
+-add_subdirectory(lasi)
+ add_subdirectory(neato_layout)
+ add_subdirectory(pango)
+-add_subdirectory(poppler)
+ add_subdirectory(quartz)
+ add_subdirectory(rsvg)
+ add_subdirectory(vt)
diff --git a/vcpkg/ports/graphviz/static-linkage.patch b/vcpkg/ports/graphviz/static-linkage.patch
new file mode 100644
index 0000000..7913275
--- /dev/null
+++ b/vcpkg/ports/graphviz/static-linkage.patch
@@ -0,0 +1,39 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 14f2847..e56a970 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -30,6 +30,9 @@ if(WIN32)
+ # libraries, so the GVDLL symbol can be unconditionally set until
+ # such support is introduced.
+ add_definitions(-DGVDLL)
++ if(NOT BUILD_SHARED_LIBS)
++ add_definitions(-DEXPORT_CDT -DEXPORT_CGHDR -DEXPORT_CGRAPH -DGVC_EXPORTS -DPATHPLAN_EXPORTS -DEXPORT_XDOT)
++ endif()
+
+ option(install_win_dependency_dlls "Install 3rd party dependencies" ON)
+ endif()
+diff --git a/plugin/gd/gvrender_gd.c b/plugin/gd/gvrender_gd.c
+index 76bbbf2..f877fa7 100644
+--- a/plugin/gd/gvrender_gd.c
++++ b/plugin/gd/gvrender_gd.c
+@@ -242,7 +242,7 @@ static void gdgen_end_page(GVJ_t * job)
+ #else
+ #define GD_IMPORT
+ #endif
+-GD_IMPORT extern gdFontPtr gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, gdFontGiant;
++BGD_EXPORT_DATA_PROT extern gdFontPtr gdFontTiny, gdFontSmall, gdFontMediumBold, gdFontLarge, gdFontGiant;
+
+ void gdgen_text(gdImagePtr im, pointf spf, pointf epf, int fontcolor, double fontsize, int fontdpi, double fontangle, char *fontname, char *str)
+ {
+diff --git a/plugin/pango/CMakeLists.txt b/plugin/pango/CMakeLists.txt
+index aca7eec..901f118 100644
+--- a/plugin/pango/CMakeLists.txt
++++ b/plugin/pango/CMakeLists.txt
+@@ -58,6 +58,7 @@ if(CAIRO_FOUND AND PANGOCAIRO_FOUND)
+ set_target_properties(gvplugin_pango PROPERTIES
+ VERSION ${GRAPHVIZ_PLUGIN_VERSION}.0.0
+ SOVERSION ${GRAPHVIZ_PLUGIN_VERSION}
++ LINKER_LANGUAGE CXX # for cairo
+ )
+
+ if(MINGW)
diff --git a/vcpkg/ports/graphviz/vcpkg.json b/vcpkg/ports/graphviz/vcpkg.json
new file mode 100644
index 0000000..40444a9
--- /dev/null
+++ b/vcpkg/ports/graphviz/vcpkg.json
@@ -0,0 +1,42 @@
+{
+ "name": "graphviz",
+ "version-semver": "10.0.1",
+ "port-version": 3,
+ "description": "Graph Visualization Tools",
+ "homepage": "https://graphviz.org/",
+ "license": "EPL-1.0",
+ "supports": "!staticcrt",
+ "dependencies": [
+ {
+ "name": "cairo",
+ "default-features": false
+ },
+ "expat",
+ "gdk-pixbuf",
+ "getopt",
+ "gts",
+ {
+ "name": "libgd",
+ "default-features": false,
+ "features": [
+ "fontconfig",
+ "freetype",
+ "jpeg",
+ "png",
+ "tiff"
+ ]
+ },
+ "librsvg",
+ "libwebp",
+ "pango",
+ {
+ "name": "pkgconf",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ "zlib"
+ ]
+}
diff --git a/vcpkg/ports/graphviz/webp-install.patch b/vcpkg/ports/graphviz/webp-install.patch
new file mode 100644
index 0000000..4aa82dd
--- /dev/null
+++ b/vcpkg/ports/graphviz/webp-install.patch
@@ -0,0 +1,13 @@
+diff --git a/plugin/webp/CMakeLists.txt b/plugin/webp/CMakeLists.txt
+index 21913a8..4811930 100644
+--- a/plugin/webp/CMakeLists.txt
++++ b/plugin/webp/CMakeLists.txt
+@@ -45,7 +45,7 @@ if(WEBP_FOUND)
+ install(
+ TARGETS gvplugin_webp
+ RUNTIME DESTINATION ${BINARY_INSTALL_DIR}
+- LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
++ LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR}
+ ARCHIVE DESTINATION ${LIBRARY_INSTALL_DIR}
+ )
+
diff --git a/vcpkg/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch b/vcpkg/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch
new file mode 100644
index 0000000..f4d8a97
--- /dev/null
+++ b/vcpkg/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch
@@ -0,0 +1,12 @@
+diff --git a/lib/expr/expr.h b/lib/expr/expr.h
+index 3d7fbd6..d6cfb53 100644
+--- a/lib/expr/expr.h
++++ b/lib/expr/expr.h
+@@ -36,6 +36,7 @@ extern "C" {
+ #include <stddef.h>
+ #include <stdio.h>
+ #include <vmalloc/vmalloc.h>
++#include <wchar.h>
+
+ #define EX_VERSION 20000101L
+