Skip to content

Commit

Permalink
Add gtk3
Browse files Browse the repository at this point in the history
  • Loading branch information
talregev committed Apr 18, 2022
1 parent 99346bb commit 2563193
Show file tree
Hide file tree
Showing 6 changed files with 649 additions and 0 deletions.
184 changes: 184 additions & 0 deletions ports/gtk3/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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 "<ClCompile Include=\\\".*\\\" />")
string(REPLACE "<ClCompile Include=\"..\\..\\..\\" "" LINE ${LINE})
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()

0 comments on commit 2563193

Please sign in to comment.