diff --git a/ports/gtk3/CMakeLists.txt b/ports/gtk3/CMakeLists.txt
new file mode 100644
index 00000000000000..b2846f3dadcc8c
--- /dev/null
+++ b/ports/gtk3/CMakeLists.txt
@@ -0,0 +1,184 @@
+cmake_minimum_required(VERSION 3.0)
+project(gtk+ C)
+
+configure_file(config.h.win32 ${CMAKE_CURRENT_SOURCE_DIR}/config.h COPYONLY)
+configure_file(gdk/gdkconfig.h.win32_broadway ${CMAKE_CURRENT_SOURCE_DIR}/gdk/gdkconfig.h COPYONLY)
+
+set(GLIB_LIB_SUFFIX 2.0)
+set(PANGO_LIB_SUFFIX 1.0)
+set(ATK_LIB_SUFFIX 1.0)
+set(GDK_PIXBUF_LIB_SUFFIX 2.0)
+if(CMAKE_BUILD_TYPE STREQUAL Debug)
+ set(CAIRO_LIB_SUFFIX d)
+endif()
+
+if (WIN32)
+ # Set utf-8 charset to avoid compile error C2001
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
+endif()
+
+# find dependencies
+# glib
+find_path(GLIB_INCLUDE_DIR NAMES glib.h PATH_SUFFIXES glib-${GLIB_LIB_SUFFIX})
+find_path(GLIBCONFIG_INCLUDE_DIR NAMES glibconfig.h HINTS ${CMAKE_PREFIX_PATH}/lib ${CMAKE_PREFIX_PATH}/debug/lib PATH_SUFFIXES glib-${GLIB_LIB_SUFFIX} glib-${GLIB_LIB_SUFFIX}/include)
+find_library(GLIB_GLIB_LIBRARY glib-${GLIB_LIB_SUFFIX})
+find_library(GLIB_GIO_LIBRARY gio-${GLIB_LIB_SUFFIX})
+find_library(GLIB_GMODULE_LIBRARY gmodule-${GLIB_LIB_SUFFIX})
+find_library(GLIB_GOBJECT_LIBRARY gobject-${GLIB_LIB_SUFFIX})
+set(GLIB_LIBRARIES ${GLIB_GLIB_LIBRARY} ${GLIB_GIO_LIBRARY} ${GLIB_GMODULE_LIBRARY} ${GLIB_GOBJECT_LIBRARY})
+
+
+# pango
+find_path(PANGO_INCLUDE_DIR NAMES pango/pango.h PATH_SUFFIXES pango-${PANGO_LIB_SUFFIX})
+find_path(HB_INCLUDE_DIR NAMES hb.h PATH_SUFFIXES harfbuzz)
+find_library(PANGO_LIBRARY pango-${PANGO_LIB_SUFFIX})
+find_library(PANGO_CAIRO_LIBRARY NAMES pangocairo-${PANGO_LIB_SUFFIX} pangowin32-${PANGO_LIB_SUFFIX})
+set(PANGO_LIBRARIES ${PANGO_LIBRARY} ${PANGO_CAIRO_LIBRARY})
+# cairo
+find_library(CAIRO_LIBRARY cairo)
+find_library(CAIRO_GOBJECT_LIBRARY cairo-gobject)
+set(CAIRO_LIBRARIES ${CAIRO_LIBRARY} ${CAIRO_GOBJECT_LIBRARY})
+find_path(CAIRO_INCLUDE_DIR NAMES cairo.h PATH_SUFFIXES cairo)
+
+# atk
+find_path(ATK_INCLUDE_DIR NAMES atk/atk.h PATH_SUFFIXES atk-${ATK_LIB_SUFFIX})
+find_library(ATK_LIBRARY atk-${ATK_LIB_SUFFIX})
+
+# gdk-pixbuf
+find_path(GDK_PIXBUF_INCLUDE_DIR NAMES gdk-pixbuf/gdk-pixbuf.h PATH_SUFFIXES gdk-pixbuf-${GDK_PIXBUF_LIB_SUFFIX})
+find_library(GDK_PIXBUF_LIBRARY gdk_pixbuf-${GDK_PIXBUF_LIB_SUFFIX})
+
+# epoxy
+find_path(EPOXY_INCLUDE_DIR epoxy/common.h)
+find_library(EPOXY_LIBRARY epoxy)
+
+# gettext
+find_path(LIBINTL_INCLUDE_DIR libintl.h)
+message(STATUS "Found libintl.h in ${LIBINTL_INCLUDE_DIR}")
+# find_library(LIBINTL_LIBRARY NAMES intl libintl preloadable_libintl HINTS /user/lib)
+
+set(GTK_REQUIRED_LIBRARIES
+ ${LIBINTL_LIBRARY}
+ ${EPOXY_LIBRARY}
+ ${GLIB_LIBRARIES}
+ ${CAIRO_LIBRARIES}
+ ${PANGO_LIBRARIES}
+ ${GDK_PIXBUF_LIBRARY}
+ ${ATK_LIBRARY}
+)
+
+set(GTK_REQUIRED_INCLUDE_DIR
+ ${LIBINTL_INCLUDE_DIR}
+ ${EPOXY_INCLUDE_DIR}
+ ${GLIB_INCLUDE_DIR}
+ ${GLIBCONFIG_INCLUDE_DIR}
+ ${GDK_PIXBUF_INCLUDE_DIR}
+ ${CAIRO_INCLUDE_DIR}
+ ${PANGO_INCLUDE_DIR}
+ ${HB_INCLUDE_DIR}
+ ${ATK_INCLUDE_DIR}
+)
+
+# defines expected by all modules
+add_definitions(
+ -DHAVE_CONFIG_H
+ -DG_DISABLE_SINGLE_INCLUDES
+ -DATK_DISABLE_SINGLE_INCLUDES
+ -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES
+ -DGTK_DISABLE_SINGLE_INCLUDES
+ -D_USE_MATH_DEFINES)
+
+add_definitions(-DG_ENABLE_DEBUG)
+if(CMAKE_BUILD_TYPE STREQUAL Debug)
+ add_definitions(-DG_ENABLE_CONSISTENCY_CHECKS)
+else()
+ add_definitions(-DG_DISABLE_CAST_CHECKS)
+endif()
+
+macro(extract_vcproj_sources VC_PROJECT OUT_VAR)
+ file(READ ${VC_PROJECT} ${VC_PROJECT}-CONTENTS)
+ STRING(REPLACE "\n" ";" ${VC_PROJECT}-CONTENTS "${${VC_PROJECT}-CONTENTS}") # split by lines
+ foreach(LINE ${${VC_PROJECT}-CONTENTS})
+ if(LINE MATCHES "")
+ string(REPLACE "" "" LINE ${LINE})
+ string(STRIP ${LINE} LINE)
+ file(TO_CMAKE_PATH ${LINE} LINE)
+ list(APPEND ${OUT_VAR} ${LINE})
+ endif()
+ endforeach()
+endmacro()
+
+# build 'win32' gdk backend
+extract_vcproj_sources(build/win32/vs14/gdk3-win32.vcxproj GDK_WIN32_SOURCES)
+add_library(gdk-3-win32 STATIC ${GDK_WIN32_SOURCES})
+target_compile_definitions(gdk-3-win32 PRIVATE
+ GDK_COMPILATION G_LOG_DOMAIN="Gdk" INSIDE_GDK_WIN32)
+target_include_directories(gdk-3-win32 PRIVATE . ./gdk ./gdk/win32 ${GTK_REQUIRED_INCLUDE_DIR})
+
+# build 'broadway' gdk backend
+extract_vcproj_sources(build/win32/vs14/gdk3-broadway.vcxproj GDK_BROADWAY_SOURCES)
+add_library(gdk-3-broadway STATIC ${GDK_BROADWAY_SOURCES})
+target_compile_definitions(gdk-3-broadway PRIVATE
+ GDK_COMPILATION G_LOG_DOMAIN="Gdk")
+target_include_directories(gdk-3-broadway PRIVATE . ./gdk ./gdk/broadway ${GTK_REQUIRED_INCLUDE_DIR})
+
+macro(gtk_add_module MODULE_NAME)
+ add_library(${MODULE_NAME} ${ARGN})
+ target_include_directories(${MODULE_NAME} PRIVATE . ./gdk ./gtk ${GTK_REQUIRED_INCLUDE_DIR})
+ target_link_libraries(${MODULE_NAME} ${GTK_REQUIRED_LIBRARIES})
+ set_target_properties(${MODULE_NAME} PROPERTIES
+ ARCHIVE_OUTPUT_NAME ${MODULE_NAME}.0)
+ install(TARGETS ${MODULE_NAME} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
+endmacro()
+
+extract_vcproj_sources(build/win32/vs14/gdk-3.vcxproj GDK_SOURCES)
+gtk_add_module(gdk-3 ${GDK_SOURCES})
+target_compile_definitions(gdk-3 PRIVATE GDK_COMPILATION)
+target_include_directories(gdk-3 PRIVATE ./gdk/win32 ./gdk/broadway)
+target_link_libraries(gdk-3 gdk-3-win32 gdk-3-broadway winmm dwmapi setupapi imm32 ws2_32)
+
+extract_vcproj_sources(build/win32/vs14/gtk-3.vcxproj GTK_SOURCES)
+set_source_files_properties(gtk/inspector/visual.c PROPERTIES COMPILE_FLAGS "/FImath.h")
+gtk_add_module(gtk-3 ${GTK_SOURCES})
+target_compile_definitions(gtk-3 PRIVATE
+ GTK_COMPILATION
+ G_LOG_DOMAIN="Gtk"
+ GTK_HOST="i686-pc"
+ GTK_PRINT_BACKENDS="file"
+ GTK_PRINT_BACKEND_ENABLE_UNSUPPORTED
+ INCLUDE_IM_am_et
+ INCLUDE_IM_cedilla
+ INCLUDE_IM_cyrillic_translit
+ INCLUDE_IM_ime
+ INCLUDE_IM_inuktitut
+ INCLUDE_IM_ipa
+ INCLUDE_IM_multipress
+ INCLUDE_IM_thai
+ INCLUDE_IM_ti_er
+ INCLUDE_IM_ti_et
+ INCLUDE_IM_viqr
+ GTK_LIBDIR="/dummy/lib"
+ GTK_DATADIR="/dummy/share"
+ GTK_DATA_PREFIX="/dummy"
+ GTK_SYSCONFDIR="/dummy/etc"
+ MULTIPRESS_CONFDIR="/dummy/etc/gtk-3.0"
+ MULTIPRESS_LOCALEDIR="/dummy/share/locale"
+ GTK_VERSION="${GTK_VERSION}/etc"
+ GTK_BINARY_VERSION="3.0.0/etc"
+ GDK_DISABLE_DEPRECATED
+ ISOLATION_AWARE_ENABLED)
+target_link_libraries(gtk-3 gdk-3 winspool comctl32 imm32)
+target_compile_options(gtk-3 PRIVATE "/wd4828" PRIVATE "/wd4244" PRIVATE "/wd4305" PRIVATE "/wd4018")
+
+extract_vcproj_sources(build/win32/vs14/gailutil-3.vcxproj GAILUTIL_SOURCES)
+gtk_add_module(gailutil-3 ${GAILUTIL_SOURCES})
+target_compile_definitions(gailutil-3 PRIVATE GTK_DISABLE_DEPRECATED GDK_DISABLE_DEPRECATED)
+target_link_libraries(gailutil-3 gtk-3 gdk-3)
+set_target_properties(gailutil-3 PROPERTIES
+ LINK_FLAGS \"/DEF:${CMAKE_CURRENT_SOURCE_DIR}/libgail-util/gailutil.def\")
+
+if(NOT GTK_SKIP_HEADERS)
+ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+ include(install_headers)
+endif()
diff --git a/ports/gtk3/cmake/install_headers.cmake b/ports/gtk3/cmake/install_headers.cmake
new file mode 100644
index 00000000000000..ca2a273e44473e
--- /dev/null
+++ b/ports/gtk3/cmake/install_headers.cmake
@@ -0,0 +1,376 @@
+install(FILES gdk/win32/gdkwin32.h DESTINATION include/gdk)
+install(FILES gdk/gdk.h DESTINATION include/gdk)
+install(FILES gdk/gdk-autocleanup.h DESTINATION include/gdk)
+install(FILES gdk/gdkapplaunchcontext.h DESTINATION include/gdk)
+install(FILES gdk/gdkcairo.h DESTINATION include/gdk)
+install(FILES gdk/gdkcursor.h DESTINATION include/gdk)
+install(FILES gdk/gdkdevice.h DESTINATION include/gdk)
+install(FILES gdk/gdkdevicepad.h DESTINATION include/gdk)
+install(FILES gdk/gdkdevicetool.h DESTINATION include/gdk)
+install(FILES gdk/gdkdevicemanager.h DESTINATION include/gdk)
+install(FILES gdk/gdkdisplay.h DESTINATION include/gdk)
+install(FILES gdk/gdkdisplaymanager.h DESTINATION include/gdk)
+install(FILES gdk/gdkdnd.h DESTINATION include/gdk)
+install(FILES gdk/gdkdrawingcontext.h DESTINATION include/gdk)
+install(FILES gdk/gdkevents.h DESTINATION include/gdk)
+install(FILES gdk/gdkframetimings.h DESTINATION include/gdk)
+install(FILES gdk/gdkglcontext.h DESTINATION include/gdk)
+install(FILES gdk/gdkkeys.h DESTINATION include/gdk)
+install(FILES gdk/gdkkeysyms.h DESTINATION include/gdk)
+install(FILES gdk/gdkkeysyms-compat.h DESTINATION include/gdk)
+install(FILES gdk/gdkmain.h DESTINATION include/gdk)
+install(FILES gdk/gdkmonitor.h DESTINATION include/gdk)
+install(FILES gdk/gdkpango.h DESTINATION include/gdk)
+install(FILES gdk/gdkframeclock.h DESTINATION include/gdk)
+install(FILES gdk/gdkpixbuf.h DESTINATION include/gdk)
+install(FILES gdk/gdkprivate.h DESTINATION include/gdk)
+install(FILES gdk/gdkproperty.h DESTINATION include/gdk)
+install(FILES gdk/gdkrectangle.h DESTINATION include/gdk)
+install(FILES gdk/gdkrgba.h DESTINATION include/gdk)
+install(FILES gdk/gdkscreen.h DESTINATION include/gdk)
+install(FILES gdk/gdkseat.h DESTINATION include/gdk)
+install(FILES gdk/gdkselection.h DESTINATION include/gdk)
+install(FILES gdk/gdktestutils.h DESTINATION include/gdk)
+install(FILES gdk/gdkthreads.h DESTINATION include/gdk)
+install(FILES gdk/gdktypes.h DESTINATION include/gdk)
+install(FILES gdk/gdkvisual.h DESTINATION include/gdk)
+install(FILES gdk/gdkwindow.h DESTINATION include/gdk)
+install(FILES gdk/deprecated/gdkcolor.h DESTINATION include/gdk/deprecated)
+install(FILES gdk/gdkconfig.h DESTINATION include/gdk)
+install(FILES gdk/gdkenumtypes.h DESTINATION include/gdk)
+install(FILES gdk/gdkversionmacros.h DESTINATION include/gdk)
+install(FILES gdk/win32/gdkwin32cursor.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32display.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32displaymanager.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32dnd.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32glcontext.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32keys.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32misc.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32monitor.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32screen.h DESTINATION include/gdk/win32)
+install(FILES gdk/win32/gdkwin32window.h DESTINATION include/gdk/win32)
+install(FILES gtk/gtk.h DESTINATION include/gtk)
+install(FILES gtk/gtk-autocleanups.h DESTINATION include/gtk)
+install(FILES gtk/gtkx.h DESTINATION include/gtk)
+install(FILES gtk/gtkx-autocleanups.h DESTINATION include/gtk)
+install(FILES gtk/gtk-a11y.h DESTINATION include/gtk)
+install(FILES gtk/gtkaboutdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkaccelgroup.h DESTINATION include/gtk)
+install(FILES gtk/gtkaccellabel.h DESTINATION include/gtk)
+install(FILES gtk/gtkaccelmap.h DESTINATION include/gtk)
+install(FILES gtk/gtkaccessible.h DESTINATION include/gtk)
+install(FILES gtk/gtkactionable.h DESTINATION include/gtk)
+install(FILES gtk/gtkactionbar.h DESTINATION include/gtk)
+install(FILES gtk/gtkadjustment.h DESTINATION include/gtk)
+install(FILES gtk/gtkappchooser.h DESTINATION include/gtk)
+install(FILES gtk/gtkappchooserbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkappchooserdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkappchooserwidget.h DESTINATION include/gtk)
+install(FILES gtk/gtkapplication.h DESTINATION include/gtk)
+install(FILES gtk/gtkapplicationwindow.h DESTINATION include/gtk)
+install(FILES gtk/gtkaspectframe.h DESTINATION include/gtk)
+install(FILES gtk/gtkassistant.h DESTINATION include/gtk)
+install(FILES gtk/gtkbbox.h DESTINATION include/gtk)
+install(FILES gtk/gtkbin.h DESTINATION include/gtk)
+install(FILES gtk/gtkbindings.h DESTINATION include/gtk)
+install(FILES gtk/gtkborder.h DESTINATION include/gtk)
+install(FILES gtk/gtkbox.h DESTINATION include/gtk)
+install(FILES gtk/gtkbuilder.h DESTINATION include/gtk)
+install(FILES gtk/gtkbuildable.h DESTINATION include/gtk)
+install(FILES gtk/gtkbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkcalendar.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellarea.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellareacontext.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellareabox.h DESTINATION include/gtk)
+install(FILES gtk/gtkcelleditable.h DESTINATION include/gtk)
+install(FILES gtk/gtkcelllayout.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrenderer.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrendereraccel.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrenderercombo.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrendererpixbuf.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrendererprogress.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrendererspin.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrendererspinner.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrenderertext.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellrenderertoggle.h DESTINATION include/gtk)
+install(FILES gtk/gtkcellview.h DESTINATION include/gtk)
+install(FILES gtk/gtkcheckbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkcheckmenuitem.h DESTINATION include/gtk)
+install(FILES gtk/gtkclipboard.h DESTINATION include/gtk)
+install(FILES gtk/gtkcolorbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkcolorchooser.h DESTINATION include/gtk)
+install(FILES gtk/gtkcolorchooserwidget.h DESTINATION include/gtk)
+install(FILES gtk/gtkcolorchooserdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkcolorutils.h DESTINATION include/gtk)
+install(FILES gtk/gtkcombobox.h DESTINATION include/gtk)
+install(FILES gtk/gtkcomboboxtext.h DESTINATION include/gtk)
+install(FILES gtk/gtkcontainer.h DESTINATION include/gtk)
+install(FILES gtk/gtkcssprovider.h DESTINATION include/gtk)
+install(FILES gtk/gtkcsssection.h DESTINATION include/gtk)
+install(FILES gtk/gtkdebug.h DESTINATION include/gtk)
+install(FILES gtk/gtkdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkdnd.h DESTINATION include/gtk)
+install(FILES gtk/gtkdragdest.h DESTINATION include/gtk)
+install(FILES gtk/gtkdragsource.h DESTINATION include/gtk)
+install(FILES gtk/gtkdrawingarea.h DESTINATION include/gtk)
+install(FILES gtk/gtkeditable.h DESTINATION include/gtk)
+install(FILES gtk/gtkentry.h DESTINATION include/gtk)
+install(FILES gtk/gtkentrybuffer.h DESTINATION include/gtk)
+install(FILES gtk/gtkentrycompletion.h DESTINATION include/gtk)
+install(FILES gtk/gtkenums.h DESTINATION include/gtk)
+install(FILES gtk/gtkeventbox.h DESTINATION include/gtk)
+install(FILES gtk/gtkeventcontroller.h DESTINATION include/gtk)
+install(FILES gtk/gtkexpander.h DESTINATION include/gtk)
+install(FILES gtk/gtkfilechooser.h DESTINATION include/gtk)
+install(FILES gtk/gtkfilechooserbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkfilechooserdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkfilechoosernative.h DESTINATION include/gtk)
+install(FILES gtk/gtkfilechooserwidget.h DESTINATION include/gtk)
+install(FILES gtk/gtkfilefilter.h DESTINATION include/gtk)
+install(FILES gtk/gtkfixed.h DESTINATION include/gtk)
+install(FILES gtk/gtkflowbox.h DESTINATION include/gtk)
+install(FILES gtk/gtkfontbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkfontchooser.h DESTINATION include/gtk)
+install(FILES gtk/gtkfontchooserdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkfontchooserwidget.h DESTINATION include/gtk)
+install(FILES gtk/gtkframe.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesture.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturedrag.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturelongpress.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturemultipress.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturepan.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturerotate.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturesingle.h DESTINATION include/gtk)
+install(FILES gtk/gtkgestureswipe.h DESTINATION include/gtk)
+install(FILES gtk/gtkgesturezoom.h DESTINATION include/gtk)
+install(FILES gtk/gtkglarea.h DESTINATION include/gtk)
+install(FILES gtk/gtkgrid.h DESTINATION include/gtk)
+install(FILES gtk/gtkheaderbar.h DESTINATION include/gtk)
+install(FILES gtk/gtkicontheme.h DESTINATION include/gtk)
+install(FILES gtk/gtkiconview.h DESTINATION include/gtk)
+install(FILES gtk/gtkimage.h DESTINATION include/gtk)
+install(FILES gtk/gtkimcontext.h DESTINATION include/gtk)
+install(FILES gtk/gtkimcontextinfo.h DESTINATION include/gtk)
+install(FILES gtk/gtkimcontextsimple.h DESTINATION include/gtk)
+install(FILES gtk/gtkimmodule.h DESTINATION include/gtk)
+install(FILES gtk/gtkimmulticontext.h DESTINATION include/gtk)
+install(FILES gtk/gtkinfobar.h DESTINATION include/gtk)
+install(FILES gtk/gtkinvisible.h DESTINATION include/gtk)
+install(FILES gtk/gtklabel.h DESTINATION include/gtk)
+install(FILES gtk/gtklayout.h DESTINATION include/gtk)
+install(FILES gtk/gtklevelbar.h DESTINATION include/gtk)
+install(FILES gtk/gtklinkbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtklistbox.h DESTINATION include/gtk)
+install(FILES gtk/gtkliststore.h DESTINATION include/gtk)
+install(FILES gtk/gtklockbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkmain.h DESTINATION include/gtk)
+install(FILES gtk/gtkmenu.h DESTINATION include/gtk)
+install(FILES gtk/gtkmenubar.h DESTINATION include/gtk)
+install(FILES gtk/gtkmenubutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkmenuitem.h DESTINATION include/gtk)
+install(FILES gtk/gtkmenushell.h DESTINATION include/gtk)
+install(FILES gtk/gtkmenutoolbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkmessagedialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkmodelbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkmodules.h DESTINATION include/gtk)
+install(FILES gtk/gtkmountoperation.h DESTINATION include/gtk)
+install(FILES gtk/gtknativedialog.h DESTINATION include/gtk)
+install(FILES gtk/gtknotebook.h DESTINATION include/gtk)
+install(FILES gtk/gtkoffscreenwindow.h DESTINATION include/gtk)
+install(FILES gtk/gtkorientable.h DESTINATION include/gtk)
+install(FILES gtk/gtkoverlay.h DESTINATION include/gtk)
+install(FILES gtk/gtkpadcontroller.h DESTINATION include/gtk)
+install(FILES gtk/gtkpagesetup.h DESTINATION include/gtk)
+install(FILES gtk/gtkpaned.h DESTINATION include/gtk)
+install(FILES gtk/gtkpapersize.h DESTINATION include/gtk)
+install(FILES gtk/gtkplacessidebar.h DESTINATION include/gtk)
+install(FILES gtk/gtkplug.h DESTINATION include/gtk)
+install(FILES gtk/gtkpopover.h DESTINATION include/gtk)
+install(FILES gtk/gtkpopovermenu.h DESTINATION include/gtk)
+install(FILES gtk/gtkprintcontext.h DESTINATION include/gtk)
+install(FILES gtk/gtkprintoperation.h DESTINATION include/gtk)
+install(FILES gtk/gtkprintoperationpreview.h DESTINATION include/gtk)
+install(FILES gtk/gtkprintsettings.h DESTINATION include/gtk)
+install(FILES gtk/gtkprogressbar.h DESTINATION include/gtk)
+install(FILES gtk/gtkradiobutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkradiomenuitem.h DESTINATION include/gtk)
+install(FILES gtk/gtkradiotoolbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkrange.h DESTINATION include/gtk)
+install(FILES gtk/gtkrecentchooser.h DESTINATION include/gtk)
+install(FILES gtk/gtkrecentchooserdialog.h DESTINATION include/gtk)
+install(FILES gtk/gtkrecentchoosermenu.h DESTINATION include/gtk)
+install(FILES gtk/gtkrecentchooserwidget.h DESTINATION include/gtk)
+install(FILES gtk/gtkrecentfilter.h DESTINATION include/gtk)
+install(FILES gtk/gtkrecentmanager.h DESTINATION include/gtk)
+install(FILES gtk/gtkrender.h DESTINATION include/gtk)
+install(FILES gtk/gtkrevealer.h DESTINATION include/gtk)
+install(FILES gtk/gtkscale.h DESTINATION include/gtk)
+install(FILES gtk/gtkscalebutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkscrollable.h DESTINATION include/gtk)
+install(FILES gtk/gtkscrollbar.h DESTINATION include/gtk)
+install(FILES gtk/gtkscrolledwindow.h DESTINATION include/gtk)
+install(FILES gtk/gtksearchbar.h DESTINATION include/gtk)
+install(FILES gtk/gtksearchentry.h DESTINATION include/gtk)
+install(FILES gtk/gtkselection.h DESTINATION include/gtk)
+install(FILES gtk/gtkseparator.h DESTINATION include/gtk)
+install(FILES gtk/gtkseparatormenuitem.h DESTINATION include/gtk)
+install(FILES gtk/gtkseparatortoolitem.h DESTINATION include/gtk)
+install(FILES gtk/gtksettings.h DESTINATION include/gtk)
+install(FILES gtk/gtkshortcutlabel.h DESTINATION include/gtk)
+install(FILES gtk/gtkshortcutsgroup.h DESTINATION include/gtk)
+install(FILES gtk/gtkshortcutssection.h DESTINATION include/gtk)
+install(FILES gtk/gtkshortcutsshortcut.h DESTINATION include/gtk)
+install(FILES gtk/gtkshortcutswindow.h DESTINATION include/gtk)
+install(FILES gtk/gtkshow.h DESTINATION include/gtk)
+install(FILES gtk/gtkstacksidebar.h DESTINATION include/gtk)
+install(FILES gtk/gtksizegroup.h DESTINATION include/gtk)
+install(FILES gtk/gtksizerequest.h DESTINATION include/gtk)
+install(FILES gtk/gtksocket.h DESTINATION include/gtk)
+install(FILES gtk/gtkspinbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkspinner.h DESTINATION include/gtk)
+install(FILES gtk/gtkstack.h DESTINATION include/gtk)
+install(FILES gtk/gtkstackswitcher.h DESTINATION include/gtk)
+install(FILES gtk/gtkstatusbar.h DESTINATION include/gtk)
+install(FILES gtk/gtkstylecontext.h DESTINATION include/gtk)
+install(FILES gtk/gtkstyleprovider.h DESTINATION include/gtk)
+install(FILES gtk/gtkswitch.h DESTINATION include/gtk)
+install(FILES gtk/gtktestutils.h DESTINATION include/gtk)
+install(FILES gtk/gtktextattributes.h DESTINATION include/gtk)
+install(FILES gtk/gtktextbuffer.h DESTINATION include/gtk)
+install(FILES gtk/gtktextbufferrichtext.h DESTINATION include/gtk)
+install(FILES gtk/gtktextchild.h DESTINATION include/gtk)
+install(FILES gtk/gtktextdisplay.h DESTINATION include/gtk)
+install(FILES gtk/gtktextiter.h DESTINATION include/gtk)
+install(FILES gtk/gtktextmark.h DESTINATION include/gtk)
+install(FILES gtk/gtktexttag.h DESTINATION include/gtk)
+install(FILES gtk/gtktexttagtable.h DESTINATION include/gtk)
+install(FILES gtk/gtktextview.h DESTINATION include/gtk)
+install(FILES gtk/gtktogglebutton.h DESTINATION include/gtk)
+install(FILES gtk/gtktoggletoolbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtktoolbar.h DESTINATION include/gtk)
+install(FILES gtk/gtktoolbutton.h DESTINATION include/gtk)
+install(FILES gtk/gtktoolitem.h DESTINATION include/gtk)
+install(FILES gtk/gtktoolitemgroup.h DESTINATION include/gtk)
+install(FILES gtk/gtktoolpalette.h DESTINATION include/gtk)
+install(FILES gtk/gtktoolshell.h DESTINATION include/gtk)
+install(FILES gtk/gtktooltip.h DESTINATION include/gtk)
+install(FILES gtk/gtktreednd.h DESTINATION include/gtk)
+install(FILES gtk/gtktreemodel.h DESTINATION include/gtk)
+install(FILES gtk/gtktreemodelfilter.h DESTINATION include/gtk)
+install(FILES gtk/gtktreemodelsort.h DESTINATION include/gtk)
+install(FILES gtk/gtktreeselection.h DESTINATION include/gtk)
+install(FILES gtk/gtktreesortable.h DESTINATION include/gtk)
+install(FILES gtk/gtktreestore.h DESTINATION include/gtk)
+install(FILES gtk/gtktreeview.h DESTINATION include/gtk)
+install(FILES gtk/gtktreeviewcolumn.h DESTINATION include/gtk)
+install(FILES gtk/gtktypes.h DESTINATION include/gtk)
+install(FILES gtk/gtkviewport.h DESTINATION include/gtk)
+install(FILES gtk/gtkvolumebutton.h DESTINATION include/gtk)
+install(FILES gtk/gtkwidget.h DESTINATION include/gtk)
+install(FILES gtk/gtkwidgetpath.h DESTINATION include/gtk)
+install(FILES gtk/gtkwindow.h DESTINATION include/gtk)
+install(FILES gtk/gtkwindowgroup.h DESTINATION include/gtk)
+install(FILES gtk/gtktextlayout.h DESTINATION include/gtk)
+install(FILES gtk/gtktypebuiltins.h DESTINATION include/gtk)
+install(FILES gtk/gtkversion.h DESTINATION include/gtk)
+install(FILES gtk/a11y/gtk-a11y-autocleanups.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkarrowaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkbooleancellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkbuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkcellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkcellaccessibleparent.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkcheckmenuitemaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkcomboboxaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkcontaineraccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkcontainercellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkentryaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkexpanderaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkflowboxaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkflowboxchildaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkframeaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkiconviewaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkimageaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkimagecellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtklabelaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtklevelbaraccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtklinkbuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtklistboxaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtklistboxrowaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtklockbuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkmenuaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkmenubuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkmenuitemaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkmenushellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtknotebookaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtknotebookpageaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkpanedaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkpopoveraccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkprogressbaraccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkradiobuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkradiomenuitemaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkrangeaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkrenderercellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkscaleaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkscalebuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkscrolledwindowaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkspinbuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkspinneraccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkstatusbaraccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkstackaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkswitchaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtktextcellaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtktextviewaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtktogglebuttonaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtktoplevelaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtktreeviewaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkwidgetaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/a11y/gtkwindowaccessible.h DESTINATION include/gtk/a11y)
+install(FILES gtk/deprecated/gtkactivatable.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkaction.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkactiongroup.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkalignment.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkarrow.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkcolorsel.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkcolorseldialog.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkfontsel.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkgradient.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhandlebox.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhbbox.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhbox.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhpaned.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhscale.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhscrollbar.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhseparator.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkhsv.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkiconfactory.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkimagemenuitem.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkmisc.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtknumerableicon.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkradioaction.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkrc.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkrecentaction.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkstatusicon.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkstock.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkstyle.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkstyleproperties.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtksymboliccolor.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtktable.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtktearoffmenuitem.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkthemingengine.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtktoggleaction.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkuimanager.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkvbbox.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkvbox.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkvscale.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkvscrollbar.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkvseparator.h DESTINATION include/gtk/deprecated)
+install(FILES gtk/deprecated/gtkvpaned.h DESTINATION include/gtk/deprecated)
+install(FILES libgail-util/gailmisc.h DESTINATION include/libgail-util)
+install(FILES libgail-util/gailtextutil.h DESTINATION include/libgail-util)
+install(FILES libgail-util/gail-util.h DESTINATION include/libgail-util)
+install(FILES gdk/broadway/gdkbroadway.h DESTINATION include/gdk)
+install(FILES gdk/broadway/gdkbroadwaydisplay.h DESTINATION include/gdk/broadway)
+install(FILES gdk/broadway/gdkbroadwaywindow.h DESTINATION include/gdk/broadway)
+install(FILES gdk/broadway/gdkbroadwaycursor.h DESTINATION include/gdk/broadway)
+install(FILES gdk/broadway/gdkbroadwaymonitor.h DESTINATION include/gdk/broadway)
+install(FILES gdk/broadway/gdkbroadwayvisual.h DESTINATION include/gdk/broadway)
diff --git a/ports/gtk3/portfile.cmake b/ports/gtk3/portfile.cmake
new file mode 100644
index 00000000000000..27a42fce1b0c4b
--- /dev/null
+++ b/ports/gtk3/portfile.cmake
@@ -0,0 +1,34 @@
+set(GTK_VERSION 3.22.19)
+set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/gtk+-${GTK_VERSION})
+vcpkg_download_distfile(ARCHIVE
+ URLS "https://ftp.gnome.org/pub/gnome/sources/gtk+/3.22/gtk+-${GTK_VERSION}.tar.xz"
+ FILENAME "gtk+-${GTK_VERSION}.tar.xz"
+ SHA512 c83198794433ee6eb29f8740d59bd7056cd36808b4bff1a99563ab1a1742e6635dab4f2a8be33317f74d3b336f0d1adc28dd91410da056b50a08c215f184dce2)
+
+vcpkg_extract_source_archive(${ARCHIVE})
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/cmake DESTINATION ${SOURCE_PATH})
+
+# generate sources using python script installed with glib
+if(NOT EXISTS ${SOURCE_PATH}/gtk/gtkdbusgenerated.h OR NOT EXISTS ${SOURCE_PATH}/gtk/gtkdbusgenerated.c)
+ vcpkg_find_acquire_program(PYTHON3)
+ set(GLIB_TOOL_DIR ${CURRENT_INSTALLED_DIR}/tools/glib)
+
+ vcpkg_execute_required_process(
+ COMMAND ${PYTHON3} ${GLIB_TOOL_DIR}/gdbus-codegen --interface-prefix org.Gtk. --c-namespace _Gtk --generate-c-code gtkdbusgenerated ./gtkdbusinterfaces.xml
+ WORKING_DIRECTORY ${SOURCE_PATH}/gtk
+ LOGNAME source-gen)
+endif()
+
+vcpkg_cmake_configure(
+ SOURCE_PATH ${SOURCE_PATH}
+ OPTIONS
+ -DGTK_VERSION=${GTK_VERSION}
+ OPTIONS_DEBUG
+ -DGTK_SKIP_HEADERS=ON)
+
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+
+file(COPY ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/gtk)
+file(RENAME ${CURRENT_PACKAGES_DIR}/share/gtk/COPYING ${CURRENT_PACKAGES_DIR}/share/gtk/copyright)
diff --git a/ports/gtk3/vcpkg.json b/ports/gtk3/vcpkg.json
new file mode 100644
index 00000000000000..a091dc6d865be1
--- /dev/null
+++ b/ports/gtk3/vcpkg.json
@@ -0,0 +1,42 @@
+{
+ "name": "gtk3",
+ "version": "3.22.19",
+ "description": "Portable library for creating graphical user interfaces.",
+ "homepage": "https://www.gtk.org/",
+ "license": "LGPL-2.0-only",
+ "dependencies": [
+ "atk",
+ {
+ "name": "cairo",
+ "default-features": false,
+ "features": [
+ "gobject"
+ ]
+ },
+ {
+ "name": "cairo",
+ "default-features": false,
+ "features": [
+ "x11"
+ ],
+ "platform": "linux"
+ },
+ "gdk-pixbuf",
+ "gettext",
+ "glib",
+ {
+ "name": "glib",
+ "host": true
+ },
+ "libepoxy",
+ "pango",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ]
+}
diff --git a/versions/baseline.json b/versions/baseline.json
index cb140f1378b07a..637baa9c171a2a 100644
--- a/versions/baseline.json
+++ b/versions/baseline.json
@@ -2672,6 +2672,10 @@
"baseline": "4.6.0",
"port-version": 0
},
+ "gtk3": {
+ "baseline": "3.22.19",
+ "port-version": 0
+ },
"gtkmm": {
"baseline": "4.6.0",
"port-version": 0
diff --git a/versions/g-/gtk3.json b/versions/g-/gtk3.json
new file mode 100644
index 00000000000000..1ffae3383e6597
--- /dev/null
+++ b/versions/g-/gtk3.json
@@ -0,0 +1,9 @@
+{
+ "versions": [
+ {
+ "git-tree": "6c253e1857e8042f489ca75da087a1e39292121a",
+ "version": "3.22.19",
+ "port-version": 0
+ }
+ ]
+}