meson: Sync build files with master and update to 3.24

This commit is contained in:
Nirbheek Chauhan 2018-11-20 01:37:09 +05:30 committed by Christoph Reiter
parent 8caa937739
commit a4fe15d9f0
29 changed files with 2432 additions and 890 deletions

26
build-aux/meson/post-install.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/sh
gtk_api_version=$1
gtk_abi_version=$2
gtk_libdir=$3
gtk_datadir=$4
# Package managers set this so we don't need to run
if [ -z "$DESTDIR" ]; then
echo Compiling GSettings schemas...
glib-compile-schemas ${gtk_datadir}/glib-2.0/schemas
echo Updating desktop database...
update-desktop-database -q ${gtk_datadir}/applications
echo Updating icon cache...
gtk-update-icon-cache -q -t -f ${gtk_datadir}/icons/hicolor
echo Updating module cache for print backends...
mkdir -p ${gtk_libdir}/gtk-3.0/3.0.0/printbackends
gio-querymodules ${gtk_libdir}/gtk-3.0/3.0.0/printbackends
echo Updating module cache for input methods...
mkdir -p ${gtk_libdir}/gtk-3.0/3.0.0/immodules
gio-querymodules ${gtk_libdir}/gtk-3.0/3.0.0/immodules
fi

329
config.h.meson Normal file
View File

@ -0,0 +1,329 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* always defined to indicate that i18n is enabled */
#mesondefine ENABLE_NLS
/* The prefix for our gettext translation domains. */
#mesondefine GETTEXT_PACKAGE
/* Disable deprecation warnings from glib */
#mesondefine GLIB_DISABLE_DEPRECATION_WARNINGS
/* Define the location where the catalogs will be installed */
#mesondefine GTK_LOCALEDIR
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
#mesondefine HAVE_BIND_TEXTDOMAIN_CODESET
/* define if we have colord */
#mesondefine HAVE_COLORD
/* Define to 1 if you have the <crt_externs.h> header file. */
#mesondefine HAVE_CRT_EXTERNS_H
/* Define to 1 if CUPS 1.6 API is available */
#mesondefine HAVE_CUPS_API_1_6
/* Define to 1 if you have the `dcgettext' function. */
#mesondefine HAVE_DCGETTEXT
/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't.
*/
#mesondefine HAVE_DECL_ISINF
/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
*/
#mesondefine HAVE_DECL_ISNAN
/* Define to 1 if you have the <dlfcn.h> header file. */
#mesondefine HAVE_DLFCN_H
/* Define to 1 if you have the <ftw.h> header file. */
#mesondefine HAVE_FTW_H
/* Define to 1 if you have the `getpagesize' function. */
#mesondefine HAVE_GETPAGESIZE
/* Define to 1 if you have the `getresuid' function. */
#mesondefine HAVE_GETRESUID
/* Define if the GNU gettext() function is already present or preinstalled. */
#mesondefine HAVE_GETTEXT
/* Define if gio-unix is available */
#mesondefine HAVE_GIO_UNIX
/* Have GNU ftw */
#mesondefine HAVE_GNU_FTW
/* Define to 1 if you have the `httpGetAuthString' function. */
#mesondefine HAVE_HTTPGETAUTHSTRING
/* Define if cups http_t authstring field is accessible */
#mesondefine HAVE_HTTP_AUTHSTRING
/* Define to 1 if you have the <inttypes.h> header file. */
#mesondefine HAVE_INTTYPES_H
/* Define to 1 if the system has the type `IPrintDialogCallback'. */
#mesondefine HAVE_IPRINTDIALOGCALLBACK
/* Define if your <locale.h> file defines LC_MESSAGES. */
#mesondefine HAVE_LC_MESSAGES
/* Define to 1 if you have the `m' library (-lm). */
#mesondefine HAVE_LIBM
/* Define to 1 if you have the <locale.h> header file. */
#mesondefine HAVE_LOCALE_H
/* Define to 1 if you have the `localtime_r' function. */
#mesondefine HAVE_LOCALTIME_R
/* Define to 1 if you have the `lstat' function. */
#mesondefine HAVE_LSTAT
/* Define to 1 if you have the `mallinfo' function. */
#mesondefine HAVE_MALLINFO
/* Define to 1 if you have the <memory.h> header file. */
#mesondefine HAVE_MEMORY_H
/* Define to 1 if you have the `mkstemp' function. */
#mesondefine HAVE_MKSTEMP
/* Define to 1 if you have a working `mmap' system call. */
#mesondefine HAVE_MMAP
/* Define to 1 if you have the `nearbyint' function. */
#mesondefine HAVE_NEARBYINT
/* Define to 1 if libpapi available */
#mesondefine HAVE_PAPI
/* Define to 1 if you have the `posix_fallocate' function. */
#mesondefine HAVE_POSIX_FALLOCATE
/* Have the Xrandr extension library */
#mesondefine HAVE_RANDR
/* Have the Xrandr 1.5 extension library */
#mesondefine HAVE_RANDR15
/* Define to 1 if you have the `rint' function. */
#mesondefine HAVE_RINT
/* Define to 1 if you have the `round' function. */
#mesondefine HAVE_ROUND
/* Define to 1 if you have the `sincos' function. */
#mesondefine HAVE_SINCOS
/* Define to 1 if you have the `log2` function */
#mesondefine HAVE_LOG2
/* Define to 1 if you ahve the `exp2` function */
#mesondefine HAVE_EXP2
/* Have the sockaddr_un.sun_len member */
#mesondefine HAVE_SOCKADDR_UN_SUN_LEN
/* Define to 1 if solaris xinerama is available */
#mesondefine HAVE_SOLARIS_XINERAMA
/* Define to 1 if you have the <stdint.h> header file. */
#mesondefine HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#mesondefine HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#mesondefine HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#mesondefine HAVE_STRING_H
/* Define to 1 if you have the <sys/mman.h> header file. */
#mesondefine HAVE_SYS_MMAN_H
/* Define to 1 if you have the <sys/param.h> header file. */
#mesondefine HAVE_SYS_PARAM_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#mesondefine HAVE_SYS_STAT_H
/* Define to 1 if sys/sysinfo.h is available */
#mesondefine HAVE_SYS_SYSINFO_H
/* Define to 1 if sys/systeminfo.h is available */
#mesondefine HAVE_SYS_SYSTEMINFO_H
/* Define to 1 if you have the <sys/time.h> header file. */
#mesondefine HAVE_SYS_TIME_H
/* Define to 1 if you have the <sys/types.h> header file. */
#mesondefine HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#mesondefine HAVE_UNISTD_H
/* Have the XCOMPOSITE X extension */
#mesondefine HAVE_XCOMPOSITE
/* Have the Xcursor library */
#mesondefine HAVE_XCURSOR
/* Have the XDAMAGE X extension */
#mesondefine HAVE_XDAMAGE
/* Have the XFIXES X extension */
#mesondefine HAVE_XFIXES
/* Define to 1 if XFree Xinerama is available */
#mesondefine HAVE_XFREE_XINERAMA
/* Have XGenericEvent */
#mesondefine HAVE_XGENERICEVENTS
/* Define to 1 if xinerama is available */
#mesondefine HAVE_XINERAMA
/* Define to use XKB extension */
#mesondefine HAVE_XKB
/* Have the SYNC extension library */
#mesondefine HAVE_XSYNC
/* Define to 1 if you have the `_lock_file' function */
#mesondefine HAVE__LOCK_FILE
/* Define to 1 if you have the `flockfile' function */
#mesondefine HAVE_FLOCKFILE
/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
#mesondefine HAVE__NL_MEASUREMENT_MEASUREMENT
/* Define if _NL_PAPER_HEIGHT is available */
#mesondefine HAVE__NL_PAPER_HEIGHT
/* Define if _NL_PAPER_WIDTH is available */
#mesondefine HAVE__NL_PAPER_WIDTH
/* Define if _NL_TIME_FIRST_WEEKDAY is available */
#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
/* Define to 1 if you have the `_NSGetEnviron' function. */
#mesondefine HAVE__NSGETENVIRON
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#mesondefine LT_OBJDIR
/* Define if <X11/extensions/XIproto.h> needed for xReply */
#mesondefine NEED_XIPROTO_H_FOR_XREPLY
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#mesondefine NO_MINUS_C_MINUS_O
/* Define to the address where bug reports for this package should be sent. */
#mesondefine PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#mesondefine PACKAGE_NAME
/* Define to the full name and version of this package. */
#mesondefine PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#mesondefine PACKAGE_TARNAME
/* Define to the home page for this package. */
#mesondefine PACKAGE_URL
/* Define to the version of this package. */
#mesondefine PACKAGE_VERSION
/* Use NSBundle functions to determine load paths for libraries, translations,
etc. */
#mesondefine QUARTZ_RELOCATION
/* Define to 1 if you have the ANSI C header files. */
#mesondefine STDC_HEADERS
/* Define to 1 if gmodule works and should be used */
#mesondefine USE_GMODULE
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# undef _POSIX_PTHREAD_SEMANTICS
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# undef _TANDEM_SOURCE
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# undef __EXTENSIONS__
#endif
/* Define to 1 if XInput 2.0 is available */
#mesondefine XINPUT_2
/* Define to 1 if XInput 2.2 is available */
#mesondefine XINPUT_2_2
/* Define to 1 if the X Window System is missing or not being used. */
#mesondefine X_DISPLAY_MISSING
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
#mesondefine _FILE_OFFSET_BITS
/* defines how to decorate public symbols while building */
#mesondefine _GDK_EXTERN
/* Define for large files, on AIX-style hosts. */
#mesondefine _LARGE_FILES
/* Define to 1 if on MINIX. */
#mesondefine _MINIX
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
#mesondefine _POSIX_1_SOURCE
/* Define to 1 if you need to in order for `stat' and other things to work. */
#mesondefine _POSIX_SOURCE
/* Define to `int' if <sys/types.h> doesn't define. */
#mesondefine gid_t
/* Define to `int' if <sys/types.h> doesn't define. */
#mesondefine uid_t
/* Define to 1 if linux/memfd.h exists */
#mesondefine HAVE_LINUX_MEMFD_H
#mesondefine GTK_LOCALEDIR
#mesondefine GTK_DATADIR
#mesondefine GTK_LIBDIR
#mesondefine HAVE_LINUX_INPUT_H
#mesondefine HAVE_DEV_EVDEV_INPUT_H
#mesondefine HAVE_TRUNC

108
demos/gtk-demo/geninclude.py Executable file
View File

@ -0,0 +1,108 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import re
import os
from collections import *
out_file = sys.argv[1]
in_files = sys.argv[2:]
file_output = """
typedef GtkWidget *(*GDoDemoFunc) (GtkWidget *do_widget);
typedef struct _Demo Demo;
struct _Demo
{
gchar *name;
gchar *title;
gchar *filename;
GDoDemoFunc func;
Demo *children;
};
"""
# Demo = namedtuple('Demo', ['name', 'title', 'file', 'func'])
demos = []
for demo_file in in_files:
filename = demo_file[demo_file.rfind('/')+1:]
demo_name = filename.replace(".c", "")
with open(demo_file, 'r') as f:
title = f.readline().replace("/*", "").strip()
file_output += "GtkWidget *do_" + demo_name + " (GtkWidget *do_widget);\n"
# demos += Demo(name = demo_name,
# title = title,
# file = demo_file,
# func = "do_" + title)
demos.append((demo_name, title, filename, "do_" + demo_name, -1))
# Generate a List of "Parent names"
parents = []
parent_ids = []
parent_index = 0
for demo in demos:
if "/" in demo[1]:
slash_index = demo[1].index('/')
parent_name = demo[1][:slash_index]
do_break = False
# Check for duplicates
if not parent_name in parents:
parents.append(parent_name)
parent_ids.append(parent_index)
demos.append(("NULL", parent_name, "NULL", "NULL", parent_index))
parent_index = parent_index + 1
# For every child with a parent, generate a list of child demos
i = 0
for parent in parents:
id = parent_ids[i]
file_output += "\nDemo child" + str(id) + "[] = {\n"
# iterate over all demos and check if the name starts with the given parent name
for child in demos:
if child[1].startswith(parent + "/"):
title = child[1][child[1].rfind('/') + 1:]
file_output += " { \"" + child[0] + "\", \"" + title + "\", \"" + child[2] + "\", " + child[3] + ", NULL },\n"
file_output += " { NULL }\n};\n"
i = i + 1
# Sort demos by title
demos = sorted(demos, key=lambda x: x[1])
file_output += "\nDemo gtk_demos[] = {\n"
for demo in demos:
# Do not generate one of these for demos with a parent demo
if "/" not in demo[1]:
child_array = "NULL"
name = demo[0];
title = demo[1];
file = demo[2]
if name != "NULL":
name = "\"" + name + "\""
if title != "NULL":
title = "\"" + title + "\""
if file != "NULL":
file = "\"" + file + "\""
if demo[4] != -1:
child_array = "child" + str(demo[4])
file_output += " { " + name + ", " + title + ", " + file + ", " + demo[3] + ", " + child_array + " },\n"
file_output += " { NULL }\n};\n"
ofile = open(out_file, "w")
ofile.write(file_output)
ofile.close()

View File

@ -75,7 +75,7 @@ gtkdemo_deps = [libgtk_dep]
if harfbuzz_dep.found() and pangoft_dep.found()
demos += files('font_features.c')
gtkdemo_deps += harfbuzz_dep
gtkdemo_deps += [harfbuzz_dep, pangoft_dep]
endif
if os_unix
@ -108,6 +108,5 @@ gtkdemo = executable(
gtkdemo_resources,
dependencies: gtkdemo_deps,
include_directories : confinc,
gui_app: true,
install: true
)

View File

@ -17,6 +17,5 @@ iconbrowser = executable(
iconbrowser_resources,
dependencies: libgtk_dep,
include_directories : confinc,
gui_app: true,
install: true
)

View File

@ -15,6 +15,5 @@ widget_factory = executable(
widgetfactory_resources,
dependencies: libgtk_dep,
include_directories : confinc,
gui_app: true,
install: true
)

78
gdk/broadway/meson.build Normal file
View File

@ -0,0 +1,78 @@
gdk_broadway_sources = files(
'gdkcursor-broadway.c',
'gdkdevice-broadway.c',
'gdkdevicemanager-broadway.c',
'gdkdisplay-broadway.c',
'gdkdnd-broadway.c',
'gdkeventsource.c',
'gdkglobals-broadway.c',
'gdkkeys-broadway.c',
'gdkmonitor-broadway.c',
'gdkproperty-broadway.c',
'gdkscreen-broadway.c',
'gdkselection-broadway.c',
'gdktestutils-broadway.c',
'gdkvisual-broadway.c',
'gdkwindow-broadway.c',
'gdkbroadway-server.c',
)
gdk_broadway_public_headers = files(
'gdkbroadwaydisplay.h',
'gdkbroadwaysurface.h',
'gdkbroadwaycursor.h',
'gdkbroadwaymonitor.h',
)
# Broadway backend headers aren't installed it seems
#install_headers(gdk_broadway_public_headers, subdir: 'gtk-4.0/gdk/broadway/')
#install_headers('gdkbroadway.h', subdir: 'gtk-4.0/gdk/')
gdk_broadway_deps = [shmlib]
gen_c_array = find_program('gen-c-array.py')
clienthtml_h = custom_target('clienthtml.h',
input : 'client.html',
output : 'clienthtml.h',
command : [
gen_c_array,
'--array-name=client_html',
'--output=@OUTPUT@',
'@INPUT@',
],
)
broadwayjs_h = custom_target('broadwayjs.h',
input : ['broadway.js'],
output : 'broadwayjs.h',
command : [
gen_c_array,
'--array-name=broadway_js',
'--output=@OUTPUT@',
'@INPUT0@',
],
)
libgdk_broadway = static_library('gdk-broadway',
clienthtml_h, broadwayjs_h,
gdk_broadway_sources, gdkconfig, gdkenum_h,
include_directories: [confinc, gdkinc],
c_args: [
'-DGDK_COMPILATION',
'-DG_LOG_DOMAIN="Gdk"',
] + common_cflags,
link_args: common_ldflags,
dependencies: [gdk_deps, gdk_broadway_deps])
# gtk4-broadwayd
broadwayd_syslib = os_win32 ? find_library('ws2_32') : shmlib
executable('broadwayd',
clienthtml_h, broadwayjs_h,
'broadwayd.c', 'broadway-server.c', 'broadway-output.c',
include_directories: [confinc, gdkinc, include_directories('.')],
c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"', ],
dependencies : [broadwayd_syslib, gdk_deps],
install : true)

20
gdk/gdkconfig.h.meson Normal file
View File

@ -0,0 +1,20 @@
#ifndef __GDKCONFIG_H__
#define __GDKCONFIG_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#include <glib.h>
G_BEGIN_DECLS
#mesondefine GDK_WINDOWING_X11
#mesondefine GDK_WINDOWING_BROADWAY
#mesondefine GDK_WINDOWING_WAYLAND
#mesondefine GDK_WINDOWING_WIN32
G_END_DECLS
#endif /* __GDKCONFIG_H__ */

View File

@ -0,0 +1,33 @@
#!/usr/bin/env python3
#
# Generate gdk.gresources.xml
#
# Usage: gen-gdk-gresources-xml SRCDIR_GDK [OUTPUT-FILE]
import os, sys
srcdir = sys.argv[1]
xml = '''<?xml version='1.0' encoding='UTF-8'?>
<gresources>
<gresource prefix='/org/gtk/libgdk'>
'''
def get_files(subdir,extension):
return sorted(filter(lambda x: x.endswith((extension)), os.listdir(os.path.join(srcdir,subdir))))
for f in get_files('resources/glsl', '.glsl'):
xml += ' <file alias=\'glsl/{0}\'>resources/glsl/{0}</file>\n'.format(f)
xml += '''
</gresource>
</gresources>'''
if len(sys.argv) > 2:
outfile = sys.argv[2]
f = open(outfile, 'w')
f.write(xml)
f.close()
else:
print(xml)

View File

@ -1,5 +1,5 @@
deprecated_gdk_sources = ['deprecated/gdkcolor.c']
gdk_sources = files([
deprecated_gdk_sources = files('deprecated/gdkcolor.c')
gdk_sources = files(
'gdk-private.c',
'gdk.c',
'gdkapplaunchcontext.c',
@ -37,9 +37,9 @@ gdk_sources = files([
'gdkdevicetool.c',
'gdkdrawingcontext.c',
'gdkmonitor.c'
])
)
gdk_public_h_sources = files([
gdk_public_headers = files(
'gdk.h',
'gdk-autocleanup.h',
'gdkapplaunchcontext.h',
@ -58,6 +58,7 @@ gdk_public_h_sources = files([
'gdkglcontext.h',
'gdkkeys.h',
'gdkkeysyms.h',
'gdkkeysyms-compat.h',
'gdkmain.h',
'gdkmonitor.h',
'gdkpango.h',
@ -75,227 +76,125 @@ gdk_public_h_sources = files([
'gdktypes.h',
'gdkvisual.h',
'gdkwindow.h',
])
)
install_headers(gdk_public_headers, subdir : 'gtk-3.0/gdk')
gdk_private_h_sources = files([
deprecated_h_sources = files('deprecated/gdkcolor.h')
install_headers(deprecated_h_sources, subdir : 'gtk-3.0/gdk/deprecated')
# This variable is unused, but added just for completeness
gdk_private_headers = files(
'gdkseatdefaultprivate.h',
'gdkdevicetoolprivate.h',
'gdkdrawingcontextprivate.h',
'gdkmonitorprivate.h',
'gdkprivate.h',
])
)
gdk_x_sources = [
'x11/MwmUtil.h',
'x11/gdkapplaunchcontext-x11.c',
'x11/gdkasync.c',
'x11/gdkasync.h',
'x11/gdkcursor-x11.c',
'x11/gdkdevice-core-x11.c',
'x11/gdkdevice-xi2.c',
'x11/gdkdevicemanager-core-x11.c',
'x11/gdkdevicemanager-x11.c',
'x11/gdkdevicemanager-xi2.c',
'x11/gdkdisplaymanager-x11.c',
'x11/gdkdisplay-x11.c',
'x11/gdkdisplay-x11.h',
'x11/gdkdnd-x11.c',
'x11/gdkeventsource.c',
'x11/gdkeventsource.h',
'x11/gdkeventtranslator.c',
'x11/gdkeventtranslator.h',
'x11/gdkgeometry-x11.c',
'x11/gdkglcontext-x11.c',
'x11/gdkglcontext-x11.h',
'x11/gdkkeys-x11.c',
'x11/gdkmain-x11.c',
'x11/gdkproperty-x11.c',
'x11/gdkscreen-x11.c',
'x11/gdkscreen-x11.h',
'x11/gdkselection-x11.c',
'x11/gdktestutils-x11.c',
'x11/gdkvisual-x11.c',
'x11/gdkwindow-x11.c',
'x11/gdkwindow-x11.h',
'x11/gdkxftdefaults.c',
'x11/gdkxid.c',
'x11/gdkx.h',
'x11/xsettings-client.h',
'x11/xsettings-client.c',
'x11/gdkmonitor-x11.c',
'x11/gdkmonitor-x11.h',
'x11/gdkx11monitor.h'
]
gdk_x_private_sources = [
'x11/gdkprivate-x11.h',
'x11/gdkdevicemanagerprivate-core.h',
]
gdk_wayland_sources = files([
gdk_wayland_sources = files(
'wayland/gdkapplaunchcontext-wayland.c',
'wayland/gdkcursor-wayland.c',
'wayland/gdkdevice-wayland.c',
'wayland/gdkdisplay-wayland.c',
'wayland/gdkdisplay-wayland.h',
'wayland/gdkdnd-wayland.c',
'wayland/gdkeventsource.c',
'wayland/gdkglcontext-wayland.c',
'wayland/gdkglcontext-wayland.h',
'wayland/gdkkeys-wayland.c',
'wayland/gdkmonitor-wayland.c',
'wayland/gdkmonitor-wayland.h',
'wayland/gdkscreen-wayland.c',
'wayland/gdkseat-wayland.h',
'wayland/gdkselection-wayland.c',
'wayland/gdkwaylanddevice.h',
'wayland/gdkwaylanddisplay.h',
'wayland/gdkwaylandglcontext.h',
'wayland/gdkwayland.h',
'wayland/gdkwaylandmonitor.h',
'wayland/gdkwaylandselection.h',
'wayland/gdkwaylandwindow.h',
'wayland/gdkwindow-wayland.c',
'wayland/wm-button-layout-translation.c',
])
gdk_wayland_private_sources = files([
'wayland/gdkprivate-wayland.h',
])
)
gdk_broadway_sources = files([
'broadway/gdkdisplay-broadway.c',
'broadway/gdkdisplay-broadway.h',
'broadway/gdkscreen-broadway.c',
'broadway/gdkscreen-broadway.h',
'broadway/broadway-output.c',
'broadway/broadway-output.h',
'broadway/broadway-server.h',
'broadway/broadway-server.c',
'broadway/gdkbroadway-server.c',
'broadway/gdkcursor-broadway.c',
'broadway/gdkvisual-broadway.c',
'broadway/gdkselection-broadway.c',
'broadway/gdkwindow-broadway.c',
'broadway/gdkwindow-broadway.h',
'broadway/gdkmonitor-broadway.c',
'broadway/gdkmonitor-broadway.h',
'broadway/gdkkeys-broadway.c',
'broadway/gdkglobals-broadway.c',
'broadway/gdkeventsource.c',
'broadway/gdkeventsource.h',
'broadway/gdkdnd-broadway.c',
'broadway/broadwayd.c',
'broadway/gdkdevicemanager-broadway.c',
'broadway/gdkdevicemanager-broadway.h',
'broadway/gdkdevice-broadway.c',
'broadway/gdkdevice-broadway.h',
'broadway/broadway-buffer.c',
'broadway/broadway-buffer.h',
'broadway/gdktestutils-broadway.c',
'broadway/gdkproperty-broadway.c'
])
gdk_broadway_private_sources = files([
'broadway/gdkprivate-broadway.h'
])
gdk_gresource_xml = configure_file(output : 'gdk.gresource.xml',
input : 'gen-gdk-gresources-xml.py',
command : [find_program('gen-gdk-gresources-xml.py'),
meson.current_source_dir(), '@OUTPUT@'])
# glsl_sources = [
# 'gl3-texture-2d.fs.glsl',
# 'gl3-texture-2d.vs.glsl',
# 'gl3-texture-rect.fs.glsl',
# 'gl3-texture-rect.vs.glsl',
# 'gl2-texture-2d.fs.glsl',
# 'gl2-texture-2d.fs.glsl',
# 'gl2-texture-rect.vs.glsl',
# 'gl2-texture-rect.vs.glsl',
# 'gles2-texture.fs.glsl',
# 'gles2-texture.vs.glsl',
# ]
# resource_xml = ''
# foreach glsl_file : glsl_sources
# resource_xml += ' <file alias="glsl/@0@">resources/glsl/@0@</file>\n'.format(glsl_file)
# endforeach
# cdata = configuration_data()
# cdata.set('GDK_GRESOURCE_XML_FILES', resource_xml)
# gdkresources_xml = configure_file(
# input : 'gdk.gresource.xml.meson',
# output : 'gdk.gresource.xml',
# configuration : cdata
# )
gdkresources = gnome.compile_resources(
'gdkresources',
'gdk.gresource.xml',
gdkresources = gnome.compile_resources('gdkresources',
gdk_gresource_xml,
source_dir: '.',
c_name: '_gdk',
extra_args: '--manual-register'
)
gdk_headers = gdk_public_headers
deprecated_h_sources = files(['deprecated/gdkcolor.h'])
gdk_enums = gnome.mkenums('gdkenumtypes',
sources: gdk_public_headers,
c_template : 'gdkenumtypes.c.template',
h_template : 'gdkenumtypes.h.template',
install_dir: join_paths(gtk_includedir, 'gtk-3.0/gdk'),
install_header : true)
gdk_headers = gdk_public_h_sources + deprecated_h_sources + gdk_private_h_sources
gdkenum_h = gdk_enums[1]
gdkenum_h = custom_target(
'gdkenum_h',
output : 'gdkenumtypes.h',
input : gdk_headers,
command : [mkenum, perl, glib_mkenums, meson.current_source_dir() + '/gdkenumtypes.h.template', '@OUTPUT@', '@INPUT@'])
gdk_marshalers = gnome.genmarshal('gdkmarshalers',
sources : 'gdkmarshalers.list',
prefix : '_gdk_marshal',
valist_marshallers : true)
gdkenum_c = custom_target(
'gdkenum_c',
output : 'gdkenumtypes.c',
input : gdk_headers,
depends : gdkenum_h,
command : [mkenum, perl, glib_mkenums, meson.current_source_dir() + '/gdkenumtypes.c.template', '@OUTPUT@', '@INPUT@'])
gdkmarshal_h = gdk_marshalers[1]
gdkmarshal_h = custom_target(
'gdkmarshal_h',
output : 'gdkmarshalers.h',
input : 'gdkmarshalers.list',
command : [mkmarshal, glib_marshal, '_gdk_marshal', '@INPUT@', '@OUTPUT@']
)
gdkconfig_cdata = configuration_data()
gdkconfig_cdata.set('GDK_WINDOWING_X11', x11_enabled)
gdkconfig_cdata.set('GDK_WINDOWING_WAYLAND', wayland_enabled)
gdkconfig_cdata.set('GDK_WINDOWING_WIN32', win32_enabled)
gdkconfig_cdata.set('GDK_WINDOWING_BROADWAY', broadway_enabled)
gdkmarshal_c = custom_target(
'gdkmarshal_c',
output : 'gdkmarshalers.c',
input : 'gdkmarshalers.list',
command : [mkmarshal, glib_marshal, '_gdk_marshal', '@INPUT@', '@OUTPUT@']
)
cdata = configuration_data()
cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
if x11_enabled cdata.set('GDK_WINDOWING_X11', '') endif
if wayland_enabled cdata.set('GDK_WINDOWING_WAYLAND', '') endif
if broadway_enabled cdata.set('GDK_WINDOWING_BROADWAY', '') endif
gdkconfig = configure_file(
input : 'gdkconfig.h.meson',
output : 'gdkconfig.h',
configuration : cdata
)
configuration : gdkconfig_cdata,
install_dir: join_paths(gtk_includedir, 'gtk-3.0/gdk'),
install : true)
gdkversion_cdata = configuration_data()
gdkversion_cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
gdkversion_cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
gdkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
gdkversionmacros = configure_file(
input : 'gdkversionmacros.h.in',
output : 'gdkversionmacros.h',
configuration: cdata
)
configuration: gdkversion_cdata,
install_dir: join_paths(gtk_includedir, 'gtk-3.0/gdk'))
gdkinc = include_directories('.')
gdkx11_inc = include_directories('x11')
gdkwayland_inc = include_directories('wayland')
xinc = include_directories('x11')
wlinc = include_directories('.')
gdk_gen_headers = [gdkenum_h, gdkmarshal_h, gdkconfig, gdkversionmacros]
gdk_deps = [
mlib,
libm,
pixbuf_dep,
cairo_dep,
pango_dep,
@ -303,80 +202,74 @@ gdk_deps = [
glib_dep,
epoxy_dep,
fontconfig_dep,
giounix_dep,
platform_gio_dep,
pangocairo_dep
]
if win32_enabled
gdk_deps += [cc.find_library('advapi32'),
cc.find_library('comctl32'),
cc.find_library('dwmapi'),
cc.find_library('imm32'),
cc.find_library('setupapi'),
cc.find_library('winmm')]
endif
gdk_sources = [
# Generated
gdkconfig,
gdk_sources,
deprecated_gdk_sources,
gdkenum_c, gdkenum_h,
gdkmarshal_c, gdkmarshal_h,
gdk_enums,
gdk_marshalers,
gdkresources,
gdkversionmacros,
gdk_headers
# Static
gdk_sources,
deprecated_gdk_sources,
]
if x11_enabled
gdk_deps += [
xrender_dep,
xi_dep,
xext_dep,
x11_dep,
xcursor_dep,
xdamage_dep,
xfixes_dep,
xcomposite_dep,
xrandr_dep
]
gdk_sources += [
gdk_x_sources,
gdk_x_private_sources
]
if wayland_enabled or broadway_enabled
if cc.has_function('shm_open')
shmlib = []
elif cc.has_function('shm_open', args : '-lrt')
shmlib = cc.find_library('rt')
else
shmlib = []
endif
endif
if wayland_enabled
subdir('wayland')
gdk_deps += [
shmlib,
xkbdep,
wlclientdep,
wlprotocolsdep,
wlcursordep,
wlegldep
]
gdk_sources += [
gdk_wayland_sources,
gdk_wayland_private_sources
]
gdk_backends = []
gdk_backends_gen_headers = [] # non-public generated headers
foreach backend : ['broadway', 'quartz', 'wayland', 'win32', 'x11']
if get_variable('@0@_enabled'.format(backend))
subdir(backend)
gdk_deps += get_variable('gdk_@0@_deps'.format(backend))
gdk_backends += get_variable('libgdk_@0@'.format(backend))
# Special-case this for now to work around Meson bug with get_variable()
# fallback being an empty array, or any array (#1481)
if backend == 'wayland'
gdk_backends_gen_headers += get_variable('gdk_@0@_gen_headers'.format(backend))
endif
endif
endforeach
if gdk_backends.length() == 0
error('No backends enabled')
endif
if broadway_enabled
gdk_deps += [
shmlib,
]
gdk_sources += [
gdk_broadway_sources,
gdk_broadway_private_sources
]
endif
libgdk = shared_library('gdk',
sources: [gdk_sources, gdkconfig, gdkenum_h],
c_args: ['-DHAVE_CONFIG_H', '-DGDK_COMPILATION'],
include_directories: [confinc, xinc, wlinc],
dependencies: gdk_deps,
install: true
)
libgdk = shared_library('gdk-3',
sources: [gdk_sources, gdk_backends_gen_headers, gdkconfig],
dependencies: gdk_deps,
include_directories: [confinc, gdkx11_inc, wlinc],
c_args: [
'-DGDK_COMPILATION',
'-DG_LOG_DOMAIN="Gdk"',
] + common_cflags,
link_whole: gdk_backends,
link_args: common_ldflags,
install: true)
libgdk_dep = declare_dependency(
sources: ['gdk.h', gdkconfig, gdkenum_h],
depends: gdk_sources,
include_directories: [confinc, xinc, wlinc],
dependencies: gdk_deps,
link_with: libgdk,
link_args: ['-Bsymbolic'],
)
sources: ['gdk.h', gdkconfig, gdkenum_h],
include_directories: [confinc, gdkx11_inc, wlinc],
dependencies: gdk_deps)

51
gdk/quartz/meson.build Normal file
View File

@ -0,0 +1,51 @@
# FIXME: do we need to do an add_language() for objective-c here?
gdk_quartz_sources = files(
'GdkQuartzView.c',
'GdkQuartzNSWindow.c',
'gdkcursor-quartz.c',
'gdkdevice-core-quartz.c',
'gdkdevicemanager-core-quartz.c',
'gdkdisplay-quartz.c',
'gdkdisplaymanager-quartz.c',
'gdkdnd-quartz.c',
'gdkevents-quartz.c',
'gdkeventloop-quartz.c',
'gdkglcontext-quartz.c',
'gdkglobals-quartz.c',
'gdkkeys-quartz.c',
'gdkmonitor-quartz.c',
'gdkproperty-quartz.c',
'gdkscreen-quartz.c',
'gdkselection-quartz.c',
'gdktestutils-quartz.c',
'gdkutils-quartz.c',
'gdkvisual-quartz.c',
'gdkwindow-quartz.c',
)
gdk_quartz_public_headers = files(
'gdkquartzcursor.h',
'gdkquartzdevice-core.h',
'gdkquartzdevicemanager-core.h',
'gdkquartzdisplay.h',
'gdkquartzdisplaymanager.h',
'gdkquartzdnd.h',
'gdkquartzkeys.h',
'gdkquartzmonitor.h',
'gdkquartzscreen.h',
'gdkquartzutils.h',
'gdkquartzvisual.h',
'gdkquartzwindow.h',
)
install_headers(gdk_quartz_public_headers, subdir: 'gtk-3.0/gdk/quartz')
install_headers('gdkquartz.h', subdir: 'gtk-3.0/gdk')
gdk_quartz_deps = [ # FIXME
]
libgdk_quartz = static_library('gdk-quartz',
gdk_quartz_sources, gdkconfig, gdkenum_h,
include_directories: [confinc, gdkinc],
c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"', '-xobjective-c'],
dependencies: [gdk_deps, gdk_quartz_deps])

View File

@ -1,115 +1,105 @@
gdk_wayland_sources = files(
'gdkapplaunchcontext-wayland.c',
'gdkcursor-wayland.c',
'gdkdevice-wayland.c',
'gdkdisplay-wayland.c',
'gdkdnd-wayland.c',
'gdkeventsource.c',
'gdkkeys-wayland.c',
'gdkglcontext-wayland.c',
'gdkmonitor-wayland.c',
'gdkscreen-wayland.c',
'gdkselection-wayland.c',
'gdkwindow-wayland.c',
'wm-button-layout-translation.c',
)
gdk_wayland_public_headers = files(
'gdkwaylanddevice.h',
'gdkwaylanddisplay.h',
'gdkwaylandglcontext.h',
'gdkwaylandmonitor.h',
'gdkwaylandselection.h',
'gdkwaylandwindow.h',
)
if wayland_enabled
runcmd = run_command('pkg-config', '--variable=pkgdatadir', 'wayland-protocols')
if runcmd.returncode() == 0
wayland_protocols_datadir = runcmd.stdout().strip() + '/'
install_headers(gdk_wayland_public_headers, subdir: 'gtk-3.0/gdk/wayland')
install_headers('gdkwayland.h', subdir: 'gtk-3.0/gdk')
gdk_wayland_deps = [
shmlib,
xkbdep,
wlclientdep,
wlprotocolsdep,
wlcursordep,
wlegldep,
]
# wayland protocols
proto_dir = dependency('wayland-protocols').get_pkgconfig_variable('pkgdatadir')
assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
wayland_scanner = find_program('wayland-scanner')
# Format:
# - protocol name
# - protocol stability ('private', 'stable' or 'unstable')
# - protocol version (if stability is 'unstable')
proto_sources = [
['gtk-shell', 'private', ],
['gtk-primary-selection', 'private', ],
['pointer-gestures', 'unstable', 'v1', ],
['xdg-shell', 'unstable', 'v6', ],
['xdg-shell', 'stable', ],
['xdg-foreign', 'unstable', 'v1', ],
['tablet', 'unstable', 'v2', ],
['keyboard-shortcuts-inhibit', 'unstable', 'v1', ],
['server-decoration', 'private' ],
]
gdk_wayland_gen_headers = []
foreach p: proto_sources
proto_name = p.get(0)
proto_stability = p.get(1)
if proto_stability == 'stable'
output_base = proto_name
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
elif proto_stability == 'private'
output_base = proto_name
input = 'protocol/@0@.xml'.format(proto_name)
else
error('Could not get wayland-protocols pkgdatadir via pkg-config.')
proto_version = p.get(2)
output_base = '@0@-@1@-@2@'.format(proto_name, proto_stability, proto_version)
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
endif
wayland_scanner = find_program('wayland-scanner')
genprotocols = find_program('genprotocolfiles.py')
gdk_wayland_gen_headers += custom_target('@0@ client header'.format(output_base),
input: input,
output: '@0@-client-protocol.h'.format(output_base),
command: [
wayland_scanner,
'client-header',
'@INPUT@', '@OUTPUT@',
])
gtk_shell_h = custom_target(
'gtk shell protocol header',
input : 'protocol/gtk-shell.xml',
output : 'gtk-shell-client-protocol.h',
command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'client-header']
)
gdk_wayland_sources += custom_target('@0@ source'.format(output_base),
input: input,
output: '@0@-protocol.c'.format(output_base),
command: [
wayland_scanner,
'private-code',
'@INPUT@', '@OUTPUT@',
])
endforeach
gtk_shell_c = custom_target(
'gtk shell protocol source',
input : 'protocol/gtk-shell.xml',
output : 'gtk-shell-protocol.c',
command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'code']
)
pointer_gestures_h = custom_target(
'pointer gestures header',
input : wayland_protocols_datadir + 'unstable/pointer-gestures/pointer-gestures-unstable-v1.xml',
output : 'pointer-gestures-unstable-v1-client-protocol.h',
command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'client-header']
)
pointer_gestures_c = custom_target(
'pointer gestures source',
input : wayland_protocols_datadir + 'unstable/pointer-gestures/pointer-gestures-unstable-v1.xml',
output : 'pointer-gestures-unstable-v1-protocol.c',
command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'code']
)
primary_selection_h = custom_target(
'primary selection header',
input : 'protocol/gtk-primary-selection.xml',
output : 'gtk-primary-selection-client-protocol.h',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'client-header']
)
primary_selection_c = custom_target(
'primary selection source',
input : 'protocol/gtk-primary-selection.xml',
output : 'gtk-primary-selection-protocol.c',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'code']
)
xdg_shell_h = custom_target(
'xdg shell v6 header',
input : wayland_protocols_datadir + 'unstable/xdg-shell/xdg-shell-unstable-v6.xml',
output : 'xdg-shell-unstable-v6-client-protocol.h',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'client-header']
)
xdg_shell_c = custom_target(
'xdg shell v6 source',
input : wayland_protocols_datadir + 'unstable/xdg-shell/xdg-shell-unstable-v6.xml',
output : 'xdg-shell-unstable-v6-protocol.c',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'code']
)
xdg_foreign_h = custom_target(
'xdg foreign v1 header',
input : wayland_protocols_datadir + 'unstable/xdg-foreign/xdg-foreign-unstable-v1.xml',
output : 'xdg-foreign-unstable-v1-client-protocol.h',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'client-header']
)
xdg_foreign_c = custom_target(
'xdg foreign v1 source',
input : wayland_protocols_datadir + 'unstable/xdg-foreign/xdg-foreign-unstable-v1.xml',
output : 'xdg-foreign-unstable-v1-protocol.c',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'code']
)
tablet_h = custom_target(
'tablet v2 header',
input : wayland_protocols_datadir + 'unstable/tablet/tablet-unstable-v2.xml',
output : 'tablet-unstable-v2-client-protocol.h',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'client-header']
)
tablet_c = custom_target(
'tablet v2 source',
input : wayland_protocols_datadir + 'unstable/tablet/tablet-unstable-v2.xml',
output : 'tablet-unstable-v2-protocol.c',
command: [genprotocols, wayland_scanner,'@INPUT@', '@OUTPUT@', 'code']
)
gdk_sources += [
gtk_shell_c,
gtk_shell_h,
pointer_gestures_h,
pointer_gestures_c,
primary_selection_h,
primary_selection_c,
xdg_shell_h,
xdg_shell_c,
xdg_foreign_h,
xdg_foreign_c,
tablet_h,
tablet_c
]
endif
libgdk_wayland = static_library('gdk-wayland',
gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
include_directories: [ confinc, gdkinc, ],
c_args: [
'-DGDK_COMPILATION',
'-DG_LOG_DOMAIN="Gdk"',
] + common_cflags,
link_args: common_ldflags,
dependencies: [ gdk_deps, gdk_wayland_deps, ])

48
gdk/win32/meson.build Normal file
View File

@ -0,0 +1,48 @@
gdk_win32_sources = files(
'gdkcursor-win32.c',
'gdkdevicemanager-win32.c',
'gdkdevice-virtual.c',
'gdkdevice-win32.c',
'gdkdevice-wintab.c',
'gdkdisplay-win32.c',
'gdkdisplaymanager-win32.c',
'gdkdnd-win32.c',
'gdkevents-win32.c',
'gdkgeometry-win32.c',
'gdkglcontext-win32.c',
'gdkglobals-win32.c',
'gdkkeys-win32.c',
'gdkmain-win32.c',
'gdkmonitor-win32.c',
'gdkproperty-win32.c',
'gdkscreen-win32.c',
'gdkselection-win32.c',
'gdktestutils-win32.c',
'gdkwin32id.c',
'gdkwindow-win32.c',
)
gdk_win32_public_headers = files(
'gdkwin32cursor.h',
'gdkwin32display.h',
'gdkwin32displaymanager.h',
'gdkwin32dnd.h',
'gdkwin32glcontext.h',
'gdkwin32keys.h',
'gdkwin32misc.h',
'gdkwin32monitor.h',
'gdkwin32screen.h',
'gdkwin32window.h',
)
install_headers(gdk_win32_public_headers, subdir: 'gtk-3.0/gdk/win32')
install_headers('gdkwin32.h', subdir: 'gtk-3.0/gdk')
gdk_win32_deps = [ # FIXME
]
libgdk_win32 = static_library('gdk-win32',
gdk_win32_sources, gdkconfig, gdkenum_h,
include_directories: [confinc, gdkinc],
c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"', '-DINSIDE_GDK_WIN32'],
dependencies: [gdk_deps, gdk_win32_deps])

81
gdk/x11/meson.build Normal file
View File

@ -0,0 +1,81 @@
# Note: gdksettings.c gets included from xsettings-client.c, do not add here
gdk_x11_sources = files(
'gdkapplaunchcontext-x11.c',
'gdkasync.c',
'gdkcursor-x11.c',
'gdkdevice-core-x11.c',
'gdkdevice-xi2.c',
'gdkdevicemanager-core-x11.c',
'gdkdevicemanager-x11.c',
'gdkdevicemanager-xi2.c',
'gdkdisplaymanager-x11.c',
'gdkdisplay-x11.c',
'gdkdnd-x11.c',
'gdkeventsource.c',
'gdkeventtranslator.c',
'gdkgeometry-x11.c',
'gdkglcontext-x11.c',
'gdkkeys-x11.c',
'gdkmain-x11.c',
'gdkproperty-x11.c',
'gdkscreen-x11.c',
'gdkscreen-x11.h',
'gdkselection-x11.c',
'gdktestutils-x11.c',
'gdkvisual-x11.c',
'gdkwindow-x11.c',
'gdkxftdefaults.c',
'gdkxid.c',
'xsettings-client.c',
'gdkmonitor-x11.c',
)
gdk_x11_public_headers = files(
'gdkx-autocleanups.h',
'gdkx11applaunchcontext.h',
'gdkx11cursor.h',
'gdkx11device.h',
'gdkx11device-core.h',
'gdkx11device-xi2.h',
'gdkx11devicemanager.h',
'gdkx11devicemanager-core.h',
'gdkx11devicemanager-xi2.h',
'gdkx11display.h',
'gdkx11displaymanager.h',
'gdkx11dnd.h',
'gdkx11glcontext.h',
'gdkx11keys.h',
'gdkx11monitor.h',
'gdkx11property.h',
'gdkx11screen.h',
'gdkx11selection.h',
'gdkx11utils.h',
'gdkx11visual.h',
'gdkx11window.h',
)
install_headers(gdk_x11_public_headers, subdir: 'gtk-3.0/gdk/x11/')
install_headers('gdkx.h', subdir: 'gtk-3.0/gdk/')
gdk_x11_deps = [
xrender_dep,
xi_dep,
xext_dep,
x11_dep,
xcursor_dep,
xdamage_dep,
xfixes_dep,
xcomposite_dep,
xrandr_dep,
xinerama_dep,
]
libgdk_x11 = static_library('gdk-x11', gdkmarshal_h,
gdk_x11_sources, gdkconfig, gdkenum_h,
include_directories: [ confinc, gdkinc, ],
c_args: [
'-DGDK_COMPILATION',
'-DG_LOG_DOMAIN="Gdk"',
] + common_cflags,
link_args: common_ldflags,
dependencies: [ gdk_deps, gdk_x11_deps, ])

View File

@ -1177,7 +1177,7 @@ MAINTAINERCLEANFILES = \
$(print_portal_built_sources) \
$(stamp_files)
DISTCLEANFILES = gtktypefuncs.c
DISTCLEANFILES = gtktypefuncs.inc
if OS_WIN32
DISTCLEANFILES += gtk-win32.rc
@ -1442,7 +1442,7 @@ gtkprivatetypebuiltins.c: $(gtk_private_type_h_sources) gtkprivatetypebuiltins.
&& rm -f xgen-gptbc
gtktypefuncs.c: stamp-gtktypebuiltins.h stamp-gtkprivatetypebuiltins.h $(top_srcdir)/gtk/*.h $(top_srcdir)/gtk/a11y/*.h $(top_srcdir)/gtk/deprecated/*.h $(top_srcdir)/gdk/*.h Makefile
gtktypefuncs.inc: stamp-gtktypebuiltins.h stamp-gtkprivatetypebuiltins.h $(top_srcdir)/gtk/*.h $(top_srcdir)/gtk/a11y/*.h $(top_srcdir)/gtk/deprecated/*.h $(top_srcdir)/gdk/*.h Makefile
$(AM_V_GEN) export LC_ALL=C ; \
(echo '#undef GTK_COMPILATION' && echo '#include <gtk/gtkx.h>') > xgen-gtfsrc.c && \
echo 'G_GNUC_BEGIN_IGNORE_DEPRECATIONS' > xgen-gtf && \
@ -1451,7 +1451,7 @@ gtktypefuncs.c: stamp-gtktypebuiltins.h stamp-gtkprivatetypebuiltins.h $(top_src
sort | uniq | \
$(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; }' >> xgen-gtf \
&& cp xgen-gtf $@ && rm -f xgen-gtf
$(srcdir)/gtktestutils.c: gtktypefuncs.c
$(srcdir)/gtktestutils.c: gtktypefuncs.inc
# target platform:
lib_LTLIBRARIES = libgtk-3.la

View File

@ -45,6 +45,7 @@ a11y_sources = files(
'gtkspinbuttonaccessible.c',
'gtkspinneraccessible.c',
'gtkstatusbaraccessible.c',
'gtkstackaccessible.c',
'gtkswitchaccessible.c',
'gtktextcellaccessible.c',
'gtktextviewaccessible.c',
@ -53,5 +54,61 @@ a11y_sources = files(
'gtktreeviewaccessible.c',
'gtkwidgetaccessible.c',
'gtkwindowaccessible.c',
'gtkstackaccessible.c'
)
)
a11y_headers = files(
'gtk-a11y-autocleanups.h',
'gtkarrowaccessible.h',
'gtkbooleancellaccessible.h',
'gtkbuttonaccessible.h',
'gtkcellaccessible.h',
'gtkcellaccessibleparent.h',
'gtkcheckmenuitemaccessible.h',
'gtkcomboboxaccessible.h',
'gtkcontaineraccessible.h',
'gtkcontainercellaccessible.h',
'gtkentryaccessible.h',
'gtkexpanderaccessible.h',
'gtkflowboxaccessible.h',
'gtkflowboxchildaccessible.h',
'gtkframeaccessible.h',
'gtkiconviewaccessible.h',
'gtkimageaccessible.h',
'gtkimagecellaccessible.h',
'gtklabelaccessible.h',
'gtklevelbaraccessible.h',
'gtklinkbuttonaccessible.h',
'gtklistboxaccessible.h',
'gtklistboxrowaccessible.h',
'gtklockbuttonaccessible.h',
'gtkmenuaccessible.h',
'gtkmenubuttonaccessible.h',
'gtkmenuitemaccessible.h',
'gtkmenushellaccessible.h',
'gtknotebookaccessible.h',
'gtknotebookpageaccessible.h',
'gtkpanedaccessible.h',
'gtkpopoveraccessible.h',
'gtkprogressbaraccessible.h',
'gtkradiobuttonaccessible.h',
'gtkradiomenuitemaccessible.h',
'gtkrangeaccessible.h',
'gtkrenderercellaccessible.h',
'gtkscaleaccessible.h',
'gtkscalebuttonaccessible.h',
'gtkscrolledwindowaccessible.h',
'gtkspinbuttonaccessible.h',
'gtkspinneraccessible.h',
'gtkstatusbaraccessible.h',
'gtkstackaccessible.h',
'gtkswitchaccessible.h',
'gtktextcellaccessible.h',
'gtktextviewaccessible.h',
'gtktogglebuttonaccessible.h',
'gtktoplevelaccessible.h',
'gtktreeviewaccessible.h',
'gtkwidgetaccessible.h',
'gtkwindowaccessible.h',
)
install_headers(a11y_headers, subdir : 'gtk-3.0/gtk/a11y')

View File

@ -1,4 +1,4 @@
gtk_deprecated_c_sources = files(
gtk_deprecated_sources = files(
'gtkactivatable.c',
'gtkaction.c',
'gtkactiongroup.c',
@ -40,3 +40,48 @@ gtk_deprecated_c_sources = files(
'gtkvseparator.c',
'gtkvpaned.c',
)
gtk_deprecated_headers = files(
'gtkactivatable.h',
'gtkaction.h',
'gtkactiongroup.h',
'gtkalignment.h',
'gtkarrow.h',
'gtkcolorsel.h',
'gtkcolorseldialog.h',
'gtkfontsel.h',
'gtkgradient.h',
'gtkhandlebox.h',
'gtkhbbox.h',
'gtkhbox.h',
'gtkhpaned.h',
'gtkhscale.h',
'gtkhscrollbar.h',
'gtkhseparator.h',
'gtkhsv.h',
'gtkiconfactory.h',
'gtkimagemenuitem.h',
'gtkmisc.h',
'gtknumerableicon.h',
'gtkradioaction.h',
'gtkrc.h',
'gtkrecentaction.h',
'gtkstatusicon.h',
'gtkstock.h',
'gtkstyle.h',
'gtkstyleproperties.h',
'gtksymboliccolor.h',
'gtktable.h',
'gtktearoffmenuitem.h',
'gtkthemingengine.h',
'gtktoggleaction.h',
'gtkuimanager.h',
'gtkvbbox.h',
'gtkvbox.h',
'gtkvscale.h',
'gtkvscrollbar.h',
'gtkvseparator.h',
'gtkvpaned.h',
)
install_headers(gtk_deprecated_headers, subdir: 'gtk-3.0/gtk/deprecated/')

View File

@ -0,0 +1,89 @@
#!/usr/bin/env python3
#
# Generate gtk.gresources.xml
#
# Usage: gen-gtk-gresources-xml SRCDIR_GTK [OUTPUT-FILE]
import os, sys
srcdir = sys.argv[1]
xml = '''<?xml version='1.0' encoding='UTF-8'?>
<gresources>
<gresource prefix='/org/gtk/libgtk'>
'''
def get_files(subdir,extension):
return sorted(filter(lambda x: x.endswith((extension)), os.listdir(os.path.join(srcdir,subdir))))
xml += '''
<file>theme/Adwaita/gtk.css</file>
<file>theme/Adwaita/gtk-dark.css</file>
<file>theme/Adwaita/gtk-contained.css</file>
<file>theme/Adwaita/gtk-contained-dark.css</file>
'''
for f in get_files('theme/Adwaita/assets', '.png'):
xml += ' <file preprocess=\'to-pixdata\'>theme/Adwaita/assets/{0}</file>\n'.format(f)
xml += '\n'
for f in get_files('theme/Adwaita/assets', '.svg'):
xml += ' <file>theme/Adwaita/assets/{0}</file>\n'.format(f)
xml += '''
<file>theme/HighContrast/gtk.css</file>
<file alias='theme/HighContrastInverse/gtk.css'>theme/HighContrast/gtk-inverse.css</file>
<file>theme/HighContrast/gtk-contained.css</file>
<file>theme/HighContrast/gtk-contained-inverse.css</file>
'''
for f in get_files('theme/HighContrast/assets', '.png'):
xml += ' <file preprocess=\'to-pixdata\'>theme/HighContrast/assets/{0}</file>\n'.format(f)
xml += '\n'
for f in get_files('theme/HighContrast/assets', '.svg'):
xml += ' <file>theme/HighContrast/assets/{0}</file>\n'.format(f)
xml += '''
<file>theme/win32/gtk-win32-base.css</file>
<file>theme/win32/gtk.css</file>
'''
for f in get_files('cursor', '.png'):
xml += ' <file>cursor/{0}</file>\n'.format(f)
for f in get_files('gesture', '.symbolic.png'):
xml += ' <file alias=\'icons/64x64/actions/{0}\'>gesture/{0}</file>\n'.format(f)
xml += '\n'
for f in get_files('ui', '.ui'):
xml += ' <file preprocess=\'xml-stripblanks\'>ui/{0}</file>\n'.format(f)
xml += '\n'
for s in ['16x16', '22x22', '24x24', '32x32', '48x48']:
for c in ['actions', 'status', 'categories']:
icons_dir = 'icons/{0}/{1}'.format(s,c)
if os.path.exists(os.path.join(srcdir,icons_dir)):
for f in get_files(icons_dir, '.png'):
xml += ' <file>icons/{0}/{1}/{2}</file>\n'.format(s,c,f)
for f in get_files('inspector', '.ui'):
xml += ' <file compressed=\'true\' preprocess=\'xml-stripblanks\'>inspector/{0}</file>\n'.format(f)
xml += '''
<file>inspector/logo.png</file>
<file>emoji/emoji.data</file>
</gresource>
</gresources>'''
if len(sys.argv) > 2:
outfile = sys.argv[2]
f = open(outfile, 'w')
f.write(xml)
f.close()
else:
print(xml)

55
gtk/gentypefuncs.py Normal file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import re
import os
debug = os.getenv('GTK_GENTYPEFUNCS_DEBUG') is not None
out_file = sys.argv[1]
in_files = sys.argv[2:]
funcs = []
if debug: print ('Output file: ', out_file)
if debug: print (len(in_files), 'input files')
def open_file(filename, mode):
if sys.version_info[0] < 3:
return open(filename, mode=mode)
else:
return open(filename, mode=mode, encoding='utf-8')
for filename in in_files:
if debug: print ('Input file: ', filename)
with open_file(filename, "r") as f:
for line in f:
line = line.rstrip('\n').rstrip('\r')
# print line
match = re.search(r'\bg[tds]k_[a-zA-Z0-9_]*_get_type\b', line)
if match:
func = match.group(0)
if not func in funcs:
funcs.append(func)
if debug: print ('Found ', func)
file_output = 'G_GNUC_BEGIN_IGNORE_DEPRECATIONS\n'
funcs = sorted(funcs)
for f in funcs:
if f.startswith('gdk_x11') or f.startswith('gtk_socket') or f.startswith('gtk_plug'):
file_output += '#ifdef GDK_WINDOWING_X11\n'
file_output += '*tp++ = {0}();\n'.format(f)
file_output += '#endif\n'
else:
file_output += '*tp++ = {0}();\n'.format(f)
if debug: print (len(funcs), 'functions')
ofile = open(out_file, "w")
ofile.write(file_output)
ofile.close()

View File

@ -764,7 +764,7 @@ gtk_test_register_all_types (void)
GType *tp;
all_registered_types = g_new0 (GType, max_gtk_types);
tp = all_registered_types;
#include "gtktypefuncs.c"
#include "gtktypefuncs.inc"
n_all_registered_types = tp - all_registered_types;
g_assert (n_all_registered_types + 1 < max_gtk_types);
*tp = 0;

View File

@ -8,6 +8,7 @@ inspector_sources = files(
'general.c',
'gestures.c',
'graphdata.c',
'gtkstackcombo.c',
'gtktreemodelcssnode.c',
'init.c',
'inspect-button.c',
@ -23,9 +24,8 @@ inspector_sources = files(
'signals-list.c',
'size-groups.c',
'statistics.c',
'strv-editor.c',
'treewalk.c',
'visual.c',
'window.c',
'strv-editor.c',
'gtkstackcombo.c'
)

View File

@ -2,7 +2,23 @@ subdir('deprecated')
subdir('a11y')
subdir('inspector')
gtk_sources = files([
gtk_cargs = [
'-DGTK_COMPILATION',
'-DG_LOG_DOMAIN="Gtk"',
# FIXME, support other backends
'-DGTK_PRINT_BACKENDS="file"',
'-DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED',
'-DGTK_BINARY_VERSION="@0@"'.format(gtk_binary_version),
'-DGTK_HOST="@0@"'.format(host_machine.system()),
'-DGTK_DATA_PREFIX="@0@"'.format(gtk_prefix),
'-DGTK_LIBDIR="@0@"'.format(gtk_libdir),
'-DGTK_LOCALEDIR="@0@"'.format(gtk_localedir),
'-DGTK_DATADIR="@0@"'.format(gtk_datadir),
'-DGTK_SYSCONFDIR="@0@"'.format(gtk_sysconfdir),
]
# List of sources to build the library from
gtk_sources = files(
'gtkactionmuxer.c',
'gtkactionobserver.c',
'gtkactionobservable.c',
@ -28,6 +44,7 @@ gtk_sources = files([
'gtkappchooserbutton.c',
'gtkappchooserdialog.c',
'gtkapplication.c',
'gtkapplicationaccels.c',
'gtkapplicationimpl.c',
'gtkapplicationwindow.c',
'gtkaspectframe.c',
@ -38,17 +55,14 @@ gtk_sources = files([
'gtkbookmarksmanager.c',
'gtkborder.c',
'gtkbox.c',
'gtkboxgadget.c',
'gtkbuildable.c',
'gtkbuilder.c',
'gtkicon.c',
'gtkshortcutswindow.c',
'gtkshortcutssection.c',
'gtkbuilderparser.c',
'gtkbuilder-menus.c',
'gtkbuiltinicon.c',
'gtkbutton.c',
'gtkcairoblur.c',
'gtkcssnode.c',
'gtkcsscalcvalue.c',
'gtkcalendar.c',
'gtkcellarea.c',
'gtkcellareabox.c',
@ -66,7 +80,6 @@ gtk_sources = files([
'gtkcellrenderertext.c',
'gtkcellrenderertoggle.c',
'gtkcellview.c',
'gtkcenterbox.c',
'gtkcheckbutton.c',
'gtkcheckmenuitem.c',
'gtkcolorbutton.c',
@ -74,44 +87,45 @@ gtk_sources = files([
'gtkcolorchooserwidget.c',
'gtkcolorchooserdialog.c',
'gtkcoloreditor.c',
'gtkcolorpicker.c',
'gtkcolorpickerkwin.c',
'gtkcolorpickerportal.c',
'gtkcolorpickershell.c',
'gtkcolorplane.c',
'gtkcolorscale.c',
'gtkcolorswatch.c',
'gtkcolorutils.c',
'gtkcombobox.c',
'gtkcomboboxtext.c',
'gtkcomposetable.c',
'gtkcontainer.c',
'gtkcssanimation.c',
'gtkcssgadget.c',
'gtkcsscustomgadget.c',
'gtkboxgadget.c',
'gtkimagedefinition.c',
'gtkprogresstracker.c',
'gtkcssimageradial.c',
'gtkcssimagerecolor.c',
'gtkcssimagefallback.c',
'gtkbuiltinicon.c',
'gtkcssstylechange.c',
'gtkcsspalettevalue.c',
'gtkcssanimatedstyle.c',
'gtkcssarrayvalue.c',
'gtkcssbgsizevalue.c',
'gtkcssbordervalue.c',
'gtkcsscalcvalue.c',
'gtkcsscolorvalue.c',
'gtkcsscornervalue.c',
'gtkcsscustomgadget.c',
'gtkcsscustomproperty.c',
'gtkcssdimensionvalue.c',
'gtkcsseasevalue.c',
'gtkcssenumvalue.c',
'gtkcssenginevalue.c',
'gtkcssgadget.c',
'gtkcssiconthemevalue.c',
'gtkcssimage.c',
'gtkcssimagebuiltin.c',
'gtkcssimagecrossfade.c',
'gtkcssimagefallback.c',
'gtkcssimagegradient.c',
'gtkcssimageicontheme.c',
'gtkcssimagelinear.c',
'gtkcssimageradial.c',
'gtkcssimagesurface.c',
'gtkcssimageurl.c',
'gtkcssimagerecolor.c',
'gtkcssimagescaled.c',
'gtkcssimagevalue.c',
'gtkcssimagewin32.c',
@ -122,7 +136,9 @@ gtk_sources = files([
'gtkcssmatcher.c',
'gtkcssnode.c',
'gtkcssnodedeclaration.c',
'gtkcssnodestylecache.c',
'gtkcssnumbervalue.c',
'gtkcsspalettevalue.c',
'gtkcssparser.c',
'gtkcsspathnode.c',
'gtkcsspositionvalue.c',
@ -133,12 +149,10 @@ gtk_sources = files([
'gtkcssselector.c',
'gtkcssstringvalue.c',
'gtkcssstyle.c',
'gtkcssstylechange.c',
'gtkcssshadowsvalue.c',
'gtkcssshadowvalue.c',
'gtkcssshorthandproperty.c',
'gtkshortcutlabel.c',
'gtkfilechoosernativeportal.c',
'gtkdragsource.c',
'gtkcssshorthandpropertyimpl.c',
'gtkcssstaticstyle.c',
'gtkcssstylefuncs.c',
@ -152,29 +166,29 @@ gtk_sources = files([
'gtkcsstypes.c',
'gtkcssvalue.c',
'gtkcsswidgetnode.c',
'gtkcssnodestylecache.c',
'gtkapplicationaccels.c',
'gtkcssdimensionvalue.c',
'gtkshortcutsgroup.c',
'gtkshortcutsshortcut.c',
'gtkfilechoosernative.c',
'gtknativedialog.c',
'gtkcsswin32sizevalue.c',
'gtkdialog.c',
'gtkdragsource.c',
'gtkdrawingarea.c',
'gtkutils.c',
'gtktooltipwindow.c',
'gtkeditable.c',
'gtkemojichooser.c',
'gtkemojicompletion.c',
'gtkentry.c',
'gtkentrybuffer.c',
'gtkentrycompletion.c',
'gtkeventbox.c',
'gtkeventcontroller.c',
'gtkeventcontrollerkey.c',
'gtkeventcontrollermotion.c',
'gtkeventcontrollerscroll.c',
'gtkexpander.c',
'gtkfilechooser.c',
'gtkfilechooserbutton.c',
'gtkfilechooserdialog.c',
'gtkfilechooserembed.c',
'gtkfilechooserentry.c',
'gtkfilechoosernative.c',
'gtkfilechoosernativeportal.c',
'gtkfilechooserutils.c',
'gtkfilechooserwidget.c',
'gtkfilefilter.c',
@ -185,15 +199,9 @@ gtk_sources = files([
'gtkfontbutton.c',
'gtkfontchooser.c',
'gtkfontchooserdialog.c',
'gtkcsswin32sizevalue.c',
'gtkfontchooserutils.c',
'gtkwin32theme.c',
'gtkwin32draw.c',
'gtkcomposetable.c',
'gdkpixbufutils.c',
'gtkfontchooserwidget.c',
'gtkframe.c',
'gtkprintoperation-portal.c',
'gtkgladecatalog.c',
'gtkgesture.c',
'gtkgesturedrag.c',
@ -202,21 +210,21 @@ gtk_sources = files([
'gtkgesturepan.c',
'gtkgesturerotate.c',
'gtkgesturesingle.c',
'gtkgesturestylus.c',
'gtkgestureswipe.c',
'gtkgesturezoom.c',
'gtkgizmo.c',
'gtkgladecatalog.c',
'gtkglarea.c',
'gtkgrid.c',
'gtkheaderbar.c',
'gtkdragdest.c',
'gtkhsla.c',
'gtkicon.c',
'gtkiconcache.c',
'gtkiconcachevalidator.c',
'gtkiconhelper.c',
'gtkicontheme.c',
'gtkiconview.c',
'gtkimage.c',
'gtkimagedefinition.c',
'gtkimcontext.c',
'gtkimcontextsimple.c',
'gtkimmodule.c',
@ -250,6 +258,7 @@ gtk_sources = files([
'gtkmodifierstyle.c',
'gtkmodules.c',
'gtkmountoperation.c',
'gtknativedialog.c',
'gtknotebook.c',
'gtkoffscreenwindow.c',
'gtkorientable.c',
@ -270,6 +279,7 @@ gtk_sources = files([
'gtkprintutils.c',
'gtkprivate.c',
'gtkprogressbar.c',
'gtkprogresstracker.c',
'gtkpixelcache.c',
'gtkpopover.c',
'gtkpopovermenu.c',
@ -302,6 +312,11 @@ gtk_sources = files([
'gtkseparatormenuitem.c',
'gtkseparatortoolitem.c',
'gtksettings.c',
'gtkshortcutsgroup.c',
'gtkshortcutlabel.c',
'gtkshortcutsshortcut.c',
'gtkshortcutssection.c',
'gtkshortcutswindow.c',
'gtksidebarrow.c',
'gtksizegroup.c',
'gtksizerequest.c',
@ -347,6 +362,7 @@ gtk_sources = files([
'gtktoolpalette.c',
'gtktoolshell.c',
'gtktooltip.c',
'gtktooltipwindow.c',
'gtktrashmonitor.c',
'gtktreedatalist.c',
'gtktreednd.c',
@ -359,28 +375,26 @@ gtk_sources = files([
'gtktreestore.c',
'gtktreeview.c',
'gtktreeviewcolumn.c',
'gtkutils.c',
'gtkvolumebutton.c',
'gtkviewport.c',
'gtkwidget.c',
'gtkwidgetfocus.c',
'gtkwidgetpath.c',
'gtkwindow.c',
'gtkwindowgroup.c',
'gtkwin32draw.c',
'gtkwin32theme.c',
'fallback-c89.c'
])
'gdkpixbufutils.c',
'language-names.c',
'script-names.c',
)
gtk_private_type_headers = files([
gtk_private_type_headers = files(
'gtkcsstypesprivate.h',
'gtktexthandleprivate.h',
])
)
gtk_private_h_sources = gtk_private_type_headers + files([
'gtkrecentchooserutils.h',
'gtkrbtree.h',
])
gtk_public_h_sources = files([
gtk_public_headers = files(
'gtk.h',
'gtk-autocleanups.h',
'gtkx.h',
@ -452,6 +466,9 @@ gtk_public_h_sources = files([
'gtkenums.h',
'gtkeventbox.h',
'gtkeventcontroller.h',
'gtkeventcontrollerkey.h',
'gtkeventcontrollermotion.h',
'gtkeventcontrollerscroll.h',
'gtkexpander.h',
'gtkfilechooser.h',
'gtkfilechooserbutton.h',
@ -473,6 +490,7 @@ gtk_public_h_sources = files([
'gtkgesturepan.h',
'gtkgesturerotate.h',
'gtkgesturesingle.h',
'gtkgesturestylus.h',
'gtkgestureswipe.h',
'gtkgesturezoom.h',
'gtkglarea.h',
@ -602,52 +620,14 @@ gtk_public_h_sources = files([
'gtkwidgetpath.h',
'gtkwindow.h',
'gtkwindowgroup.h',
])
)
gtk_deprecated_type_headers = files([
'deprecated/gtkactivatable.h',
'deprecated/gtkaction.h',
'deprecated/gtkactiongroup.h',
'deprecated/gtkalignment.h',
'deprecated/gtkarrow.h',
'deprecated/gtkcolorsel.h',
'deprecated/gtkcolorseldialog.h',
'deprecated/gtkfontsel.h',
'deprecated/gtkgradient.h',
'deprecated/gtkhandlebox.h',
'deprecated/gtkhbbox.h',
'deprecated/gtkhbox.h',
'deprecated/gtkhpaned.h',
'deprecated/gtkhscale.h',
'deprecated/gtkhscrollbar.h',
'deprecated/gtkhseparator.h',
'deprecated/gtkhsv.h',
'deprecated/gtkiconfactory.h',
'deprecated/gtkimagemenuitem.h',
'deprecated/gtkmisc.h',
'deprecated/gtknumerableicon.h',
'deprecated/gtkradioaction.h',
'deprecated/gtkrc.h',
'deprecated/gtkrecentaction.h',
'deprecated/gtkstatusicon.h',
'deprecated/gtkstock.h',
'deprecated/gtkstyle.h',
'deprecated/gtkstyleproperties.h',
'deprecated/gtksymboliccolor.h',
'deprecated/gtktable.h',
'deprecated/gtktearoffmenuitem.h',
'deprecated/gtkthemingengine.h',
'deprecated/gtktoggleaction.h',
'deprecated/gtkuimanager.h',
'deprecated/gtkvbbox.h',
'deprecated/gtkvbox.h',
'deprecated/gtkvscale.h',
'deprecated/gtkvscrollbar.h',
'deprecated/gtkvseparator.h',
'deprecated/gtkvpaned.h',
])
# Installed headers without compatibility guarantees that are not included in gtk/gtk.h
gtk_semi_private_headers = files('gtktextlayout.h')
gtk_unix_sources = files([
install_headers(gtk_public_headers + gtk_semi_private_headers, subdir: 'gtk-3.0/gtk')
gtk_unix_sources = files(
'gtkcustompaperunixdialog.c',
'gtkpagesetupunixdialog.c',
'gtkprinter.c',
@ -656,20 +636,57 @@ gtk_unix_sources = files([
'gtkprinteroptionwidget.c',
'gtkprintjob.c',
'gtkprintoperation-unix.c',
'gtkprintoperation-portal.c',
'gtkprintunixdialog.c',
'gtkprintbackend.c',
'gtksearchenginetracker.c',
])
gtkresources = gnome.compile_resources(
'gtkresources',
'gtk.gresource.xml',
source_dir: '.',
c_name: '_gtk',
extra_args: '--manual-register'
)
gtk_x11_sources = files([
if os_unix
gtk_sources += gtk_unix_sources
endif
gtk_win32_sources = files(
'gtkprint-win32.c',
'gtkprintoperation-win32.c',
'gtkfilechoosernativewin32.c',
'gtkwin32.c',
)
if os_win32
gtk_sources += gtk_win32_sources
endif
gen_gtk_gresources_xml = find_program('gen-gtk-gresources-xml.py')
gtk_gresources_xml = configure_file(output: 'gtk.gresources.xml',
command: [
gen_gtk_gresources_xml,
meson.current_source_dir(),
'@OUTPUT@'
])
# Re-build the theme files if sassc is available
theme_deps = []
sassc = find_program('sassc', required: false)
if sassc.found()
sassc_opts = [ '-a', '-M', '-t', 'compact' ]
subdir('theme/Adwaita')
subdir('theme/HighContrast')
endif
gtkresources = gnome.compile_resources('gtkresources',
gtk_gresources_xml,
dependencies: theme_deps,
source_dir: [
# List in order of preference
meson.current_build_dir(),
meson.current_source_dir(),
],
c_name: '_gtk',
extra_args: '--manual-register')
gtk_use_x11_sources = files([
'gtkplug.c',
'gtksocket.c',
'gtkxembed.c',
@ -678,122 +695,120 @@ gtk_x11_sources = files([
'gtkmountoperation-x11.c',
])
gtk_wayland_sources = files([
gtk_use_wayland_sources = files([
'gtkapplication-wayland.c'
])
dnd_sources = files([
'gtkclipboard.c',
'gtkdnd.c'
])
if quartz_enabled
gtk_sources += files(
'gtkclipboard-quartz.c',
'gtkdnd-quartz.c',
)
else
gtk_sources += files(
'gtkclipboard.c',
'gtkdnd.c',
'gtkdragdest.c',
)
endif
gtk_use_wayland_or_x11_c_sources = files([
'gtkapplication-dbus.c'
])
gtk_use_wayland_or_x11_sources = files( 'gtkapplication-dbus.c')
gtk_use_win32_sources = files(
'gtkwin32embed.c',
'gtkwin32embedwidget.c',
'gtkmountoperation-stub.c',
)
gtk_use_quartz_sources = files(
'gtksearchenginequartz.c',
'gtkmountoperation-stub.c',
'gtkapplication-quartz.c',
'gtkapplication-quartz-menu.c',
'gtkfilechoosernativequartz.c',
'gtkquartz.c',
)
gtk_stub_sources = files('gtkmountoperation-stub.c')
gtk_dbus_src = gnome.gdbus_codegen('gtkdbusgenerated', 'gtkdbusinterfaces.xml',
interface_prefix: 'org.Gtk.',
namespace: '_Gtk')
gtkmarshal_h = custom_target(
'gtkmarshal_h',
output : 'gtkmarshalers.h',
input : 'gtkmarshalers.list',
command : [mkmarshal, glib_marshal, '_gtk_marshal', '@INPUT@', '@OUTPUT@']
)
gtkmarshalers = gnome.genmarshal('gtkmarshalers',
sources: 'gtkmarshalers.list',
prefix: '_gtk_marshal',
valist_marshallers: true)
gtkmarshal_c = custom_target(
'gtkmarshal_c',
output : 'gtkmarshalers.c',
input : 'gtkmarshalers.list',
command : [mkmarshal, glib_marshal, '_gtk_marshal', '@INPUT@', '@OUTPUT@']
)
gtkmarshal_h = gtkmarshalers[1]
gtktypebuiltins = gnome.mkenums('gtktypebuiltins',
sources: gtk_public_headers + gtk_deprecated_headers + a11y_headers,
c_template: 'gtktypebuiltins.c.template',
h_template: 'gtktypebuiltins.h.template',
install_dir: join_paths(gtk_includedir, 'gtk-3.0/gtk'),
install_header: true)
gtktypebuiltins_h = gtktypebuiltins[1]
gtkprivatetypebuiltins = gnome.mkenums('gtkprivatetypebuiltins',
sources: gtk_private_type_headers,
c_template: 'gtkprivatetypebuiltins.c.template',
h_template: 'gtkprivatetypebuiltins.h.template')
gtkprivatetypebuiltins_h = gtkprivatetypebuiltins[1]
# Generate gtktypefuncs.inc
typefuncs = custom_target('gtktypefuncs.inc',
depends: [ gdkenum_h ],
output: 'gtktypefuncs.inc',
input: gdk_headers +
gtk_public_headers +
gtk_deprecated_headers +
[ gtktypebuiltins_h, gdkenum_h ],
command: [
find_program('gentypefuncs.py'),
'@OUTPUT@',
'@INPUT@',
],
install: false)
gtkversion_cdata = configuration_data()
gtkversion_cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
gtkversion_cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
gtkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
gtkversion_cdata.set('GTK_BINARY_AGE', gtk_binary_age)
gtkversion_cdata.set('GTK_INTERFACE_AGE', gtk_interface_age)
gtktypebuiltins_h = custom_target(
'gtkypebuiltins_h',
output : 'gtktypebuiltins.h',
input : gtk_public_h_sources + gtk_deprecated_type_headers,
command : [mkenum, perl, glib_mkenums, meson.current_source_dir() + '/gtktypebuiltins.h.template', '@OUTPUT@', '@INPUT@']
)
gtkversion = configure_file(input: 'gtkversion.h.in',
output: 'gtkversion.h',
configuration: gtkversion_cdata,
install_dir: join_paths(gtk_includedir, 'gtk-3.0/gtk'))
gtktypebuiltins_c = custom_target(
'gtkypebuiltins_c',
output : 'gtktypebuiltins.c',
input : gtk_public_h_sources + gtk_deprecated_type_headers,
depends : gtktypebuiltins_h,
command : [mkenum, perl, glib_mkenums, meson.current_source_dir() + '/gtktypebuiltins.c.template', '@OUTPUT@', '@INPUT@']
)
gtkprivatetypebuiltins_h = custom_target(
'gtkprivateypebuiltins_h',
output : 'gtkprivatetypebuiltins.h',
input : gtk_private_type_headers,
command : [mkenum, perl, glib_mkenums, meson.current_source_dir() + '/gtkprivatetypebuiltins.h.template', '@OUTPUT@', '@INPUT@']
)
gtkprivatetypebuiltins_c = custom_target(
'gtkprivateypebuiltins_c',
output : 'gtkprivatetypebuiltins.c',
input : gtk_private_type_headers,
depends : [gtkprivatetypebuiltins_h, gtktypebuiltins_h],
command : [mkenum, perl, glib_mkenums, meson.current_source_dir() + '/gtkprivatetypebuiltins.c.template', '@OUTPUT@', '@INPUT@']
)
gentypefuncs_prog = find_program('gentypefuncs.py')
# Generate gtktypefuncs.c
typefuncs = custom_target(
'typefuncs',
depends: gdkenum_h,
output : 'gtktypefuncs.c',
input : gdk_headers + gtk_public_h_sources + gtk_deprecated_type_headers + gtk_private_h_sources + [gtktypebuiltins_h] + [gdkenum_h],
command: [gentypefuncs_prog, '@OUTPUT@', '@INPUT@'],
install: false,
)
cdata = configuration_data()
cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
cdata.set('GTK_BINARY_AGE', gtk_binary_age)
cdata.set('GTK_INTERFACE_AGE', gtk_interface_age)
gtkversion = configure_file(
input : 'gtkversion.h.in',
output : 'gtkversion.h',
configuration: cdata
)
gtk_cargs = [
'-DGTK_COMPILATION',
'-DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED',
'-DGTK_BINARY_VERSION="' + gtk_binary_version + '"',
'-DGTK_HOST="' + host_machine.system() + '"',
'-DGTK_SYSCONFDIR="' + get_option('prefix') + '/etc"',
'-DGTK_DATADIR="' + get_option('datadir') + '"',
'-DGTK_DATA_PREFIX="'+ get_option('prefix') + '"',
'-DGTK_PRINT_BACKENDS="null"',
gtk_gen_headers = [
gtkmarshalers,
gtkprivatetypebuiltins,
gtktypebuiltins,
gtkversion,
]
gtk_sources += [
gtk_dbus_src,
gtk_unix_sources,
gtk_deprecated_c_sources,
dnd_sources,
gtk_deprecated_sources,
inspector_sources,
a11y_sources,
gtkresources,
gtkmarshal_c,
gtkprivatetypebuiltins_c,
gtktypebuiltins_c,
gtkmarshalers,
gtkprivatetypebuiltins,
gtktypebuiltins,
]
gtk_deps = [
gmodule_dep,
giounix_dep,
glib_dep,
atkbridge_dep,
gobject_dep,
platform_gio_dep,
pangocairo_dep,
pango_dep,
cairogobj_dep,
@ -802,68 +817,194 @@ gtk_deps = [
pixbuf_dep,
atk_dep,
epoxy_dep,
mlib,
libm,
]
if x11_enabled
runcmd = run_command('pkg-config', '--variable=prefix', 'x11')
if runcmd.returncode() == 0
gtk_cargs += '-DX11_DATA_PREFIX="' + runcmd.stdout().strip() + '"'
else
error('Could not get x11 data prefix via pkg-config.')
endif
x11_data_prefix = dependency('x11').get_pkgconfig_variable('prefix')
gtk_sources += [
gtk_x11_sources,
gtk_use_wayland_or_x11_c_sources
]
gtk_deps += [
xi_dep,
x11_dep,
pangoft_dep
]
gtk_cargs += [ '-DX11_DATA_PREFIX="@0@"'.format(x11_data_prefix), ]
gtk_sources += gtk_use_x11_sources
gtk_deps += [ xi_dep, x11_dep, ]
endif
if wayland_enabled
gtk_sources += [
gtk_wayland_sources,
gtk_use_wayland_or_x11_c_sources
]
gtk_deps += [
pangoft_dep
]
gtk_sources += gtk_use_wayland_sources
endif
gnome.compile_schemas()
if broadway_enabled
gtk_sources += ['gtkimcontextbroadway.c']
endif
libgtk = shared_library('gtk',
gtk_sources,
gtkmarshal_h,
c_args: gtk_cargs,
include_directories: [confinc, gdkinc, gtkinc],
dependencies: [gtk_deps, libgdk_dep],
install: true
)
if win32_enabled
gtk_cargs += []
gtk_sources += gtk_use_win32_sources
gtk_deps += [ giowin32_dep, pangowin32_dep ]
else
gtk_deps += [ atkbridge_dep, ]
endif
libgtk_dep = declare_dependency(
sources: [
'gtk.h',
gtkversion,
gtktypebuiltins_c,
if quartz_enabled
gtk_sources += gtk_use_quartz_sources
gtk_cargs += ['-xobjective-c'] # FIXME? maybe add_languages() instead?
endif
# So we don't add these twice
if x11_enabled or wayland_enabled
gtk_sources += gtk_use_wayland_or_x11_sources
gtk_deps += pangoft_dep
endif
if not (x11_enabled or win32_enabled or quartz_enabled)
gtk_sources += gtk_stub_sources
endif
if cloudproviders_enabled
gtk_deps += cloudproviders_dep
endif
# Unconditional. If libintl isn't found,
# the object just does nothing being in the deplist
gtk_deps += libintl_dep
gtk_settings_schemas = [
'org.gtk.Settings.FileChooser.gschema.xml',
'org.gtk.Settings.ColorChooser.gschema.xml',
'org.gtk.Settings.EmojiChooser.gschema.xml',
'org.gtk.Settings.Debug.gschema.xml',
]
install_data(gtk_settings_schemas, install_dir: gtk_schemasdir)
gnome.compile_schemas(depend_files: files(gtk_settings_schemas),
build_by_default: true)
gtk_schema_build_dir = meson.current_build_dir()
# Check for more things
if cc.has_header('langinfo.h')
foreach nl_enum: [ '_NL_MEASUREMENT_MEASUREMENT',
'_NL_PAPER_HEIGHT',
'_NL_PAPER_WIDTH',
'_NL_TIME_FIRST_WEEKDAY', ]
cdata.set('HAVE_' + nl_enum, cc.has_header_symbol('langinfo.h', nl_enum))
endforeach
endif
# Library
libgtk = shared_library('gtk-3',
soversion: gtk_soversion,
sources: [typefuncs, gtk_sources, gtkmarshal_h, gtkprivatetypebuiltins_h],
c_args: gtk_cargs + common_cflags,
include_directories: [confinc, gdkinc, gtkinc],
dependencies: gtk_deps + [libgdk_dep],
link_with: libgdk,
link_args: common_ldflags,
install: true)
gtk_dep_sources = [gtkversion, gtktypebuiltins_h]
# Introspection
build_gir = get_option('introspection')
if build_gir
gir_args = [
'--quiet',
]
# We may build some of the dependencies as sub-projects; this means
# that we need to depend on the built introspection data, instead of
# the installed one
gdk_gir_inc = [ 'cairo-1.0', 'Gio-2.0', ]
if pixbuf_dep.type_name() == 'internal'
gdk_gir_inc += subproject('gdk-pixbuf').get_variable('gdkpixbuf_gir').get(0)
else
gdk_gir_inc += 'GdkPixbuf-2.0'
endif
if pango_dep.type_name() == 'internal'
gdk_gir_inc += subproject('pango').get_variable('pango_gir').get(0)
else
gdk_gir_inc += 'Pango-1.0'
endif
gdk_gir = gnome.generate_gir(libgtk,
sources: gdk_public_headers + gdk_sources + [ gdkenum_h ],
namespace: 'Gdk',
nsversion: gtk_api_version,
identifier_prefix: 'Gdk',
symbol_prefix: 'gdk',
export_packages: 'gtk+-3.0',
includes: gdk_gir_inc,
header: 'gdk/gdk.h',
install: true,
extra_args: gir_args + [
'-DGDK_COMPILATION',
])
gdk_gir_dep = declare_dependency(sources: gdk_gir)
gtk_dep_sources += gdk_gir
if x11_enabled
gdk_x11_gir = gnome.generate_gir(libgtk,
sources: gdk_x11_public_headers + gdk_x11_sources,
namespace: 'GdkX11',
nsversion: gtk_api_version,
identifier_prefix: 'Gdk',
symbol_prefix: 'gdk',
export_packages: 'gtk+-x11-3.0',
includes: [ gdk_gir[0], 'xlib-2.0', ],
install: true,
dependencies: gdk_gir_dep,
header: 'gdk/gdkx.h',
extra_args: gir_args + [
'-DGDK_COMPILATION',
])
gtk_dep_sources += gdk_x11_gir
endif
gtk_introspection_sources = [
gtk_public_headers,
gtk_sources,
a11y_headers,
a11y_sources,
gtktypebuiltins_h,
],
dependencies: gtk_deps,
link_with: [libgtk, libgdk],
link_args: ['-Bsymbolic'],
include_directories: [confinc, gtkinc]
)
gtkversion,
]
gtk_gir = gnome.generate_gir(libgtk,
sources: gtk_introspection_sources,
namespace: 'Gtk',
nsversion: gtk_api_version,
identifier_prefix: 'Gtk',
symbol_prefix: 'gtk',
export_packages: 'gtk+-3.0',
includes: [ gdk_gir[0], 'Atk-1.0', ],
header: 'gtk/gtk.h',
install: true,
dependencies: gdk_gir_dep,
extra_args: gir_args + [
'-DGTK_COMPILATION',
'--c-include=gtk/gtk-a11y.h',
])
gtk_dep_sources += gtk_gir
endif
libgtk_dep = declare_dependency(sources: gtk_dep_sources,
include_directories: [confinc, gtkinc],
dependencies: gtk_deps + [libgdk_dep],
link_with: libgtk,
link_args: common_ldflags)
if quartz_enabled
# HACK: install_data() doesn't allow installing under a different name (#1487)
# FIXME: or maybe just rename it to gtk-keys.css in the src tree?
configure_file(input: 'gtk-keys.css.mac',
output: 'gtk-keys.css',
copy: true,
install_dir: join_paths(get_option('datadir'), 'themes/Mac/gtk-4.0'))
endif
####### Utils ######
gtk_query_settings = executable(
'gtk-query-settings',
'gtk-query-settings.c',
c_args: gtk_cargs,
dependencies: libgtk_dep,
install: true
)
@ -871,6 +1012,7 @@ gtk_query_settings = executable(
gtk_builder_tool = executable(
'gtk-builder-tool',
'gtk-builder-tool.c',
c_args: gtk_cargs,
dependencies: libgtk_dep,
install: true
)
@ -878,21 +1020,24 @@ gtk_builder_tool = executable(
gtk_update_icon_cache = executable(
'gtk-update-icon-cache',
'updateiconcache.c',
c_args: gtk_cargs,
dependencies: libgtk_dep,
install: true
)
# gtk_query_immodules = executable(
# 'gtk-query-immodules-3.0',
# 'queryimmodules.c',
# 'gtkutils.c',
# dependencies: libgtk_dep,
# install: true
# )
gtk_query_immodules = executable(
'gtk-query-immodules-3.0',
'queryimmodules.c',
'gtkutils.c',
c_args: gtk_cargs,
dependencies: libgtk_dep,
install: true
)
gtk_encode_symbolic_svg = executable(
'gtk-encode-symbolic-svg',
'encodesymbolic.c',
c_args: gtk_cargs,
dependencies: libgtk_dep,
install: true
)
@ -900,6 +1045,7 @@ gtk_encode_symbolic_svg = executable(
gtk_launch = executable(
'gtk-launch',
'gtk-launch.c',
c_args: gtk_cargs,
dependencies: libgtk_dep,
install: true
)

View File

@ -0,0 +1,30 @@
scss_files = files([
'_colors-public.scss',
'_colors.scss',
'_common.scss',
'_drawing.scss',
])
theme_variants = [
'dark',
]
theme_deps += custom_target('Adwaita',
input: 'gtk-contained.scss',
output: 'gtk-contained.css',
command: [
sassc, sassc_opts, '@INPUT@', '@OUTPUT@',
],
depend_files: scss_files,
build_by_default: true)
foreach variant: theme_variants
theme_deps += custom_target('Adwaita-' + variant,
input: 'gtk-contained-@0@.scss'.format(variant),
output: 'gtk-contained-@0@.css'.format(variant),
command: [
sassc, sassc_opts, '@INPUT@', '@OUTPUT@',
],
depend_files: scss_files,
build_by_default: true)
endforeach

View File

@ -0,0 +1,29 @@
scss_files = files([
'_colors.scss',
'_common.scss',
'_drawing.scss',
])
theme_variants = [
'inverse',
]
theme_deps += custom_target('HighContrast',
input: 'gtk-contained.scss',
output: 'gtk-contained.css',
command: [
sassc, sassc_opts, '@INPUT@', '@OUTPUT@',
],
depend_files: scss_files,
build_by_default: true)
foreach variant: theme_variants
theme_deps += custom_target('HighContrast-' + variant,
input: 'gtk-contained-@0@.scss'.format(variant),
output: 'gtk-contained-@0@.css'.format(variant),
command: [
sassc, sassc_opts, '@INPUT@', '@OUTPUT@',
],
depend_files: scss_files,
build_by_default: true)
endforeach

View File

@ -1,24 +1,73 @@
project('gtk+-3.0', 'c',
version: '3.22.0',
version: '3.24.1',
default_options: [
'buildtype=debugoptimized',
'c_std=gnu89',
'warning_level=1'
],
meson_version : '>= 0.43.0',
license: 'LGPLv2.1+')
glib_major_req = 2
glib_minor_req = 53
glib_micro_req = 4
if glib_minor_req.is_odd()
glib_min_required = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req - 1)
else
glib_min_required = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req)
endif
if glib_minor_req.is_odd()
glib_max_allowed = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req + 1)
else
glib_max_allowed = 'GLIB_VERSION_@0@_@1@'.format(glib_major_req, glib_minor_req)
endif
glib_req = '>= @0@.@1@.@2@'.format(glib_major_req, glib_minor_req, glib_micro_req)
pango_req = '>= 1.41.0'
atk_req = '>= 2.15.1'
cairo_req = '>= 1.14.0'
gdk_pixbuf_req = '>= 2.30.0'
introspection_req = '>= 1.39.0'
wayland_proto_req = '>= 1.12'
wayland_req = '>= 1.9.91'
epoxy_req = '>= 1.4'
cloudproviders_req = '>= 0.2.5'
xkbcommon_req = '>= 0.2.0'
gnome = import('gnome')
add_global_arguments('-DG_LOG_USE_STRUCTURED=1', language: 'c')
add_global_arguments('-DG_ENABLE_DEBUG', language: 'c')
add_global_arguments('-DG_ENABLE_CONSISTENCY_CHECKS', language: 'c')
add_project_arguments('-DG_LOG_USE_STRUCTURED=1', language: 'c')
add_project_arguments('-DGLIB_MIN_REQUIRED_VERSION=' + glib_min_required, language: 'c')
add_project_arguments('-DGLIB_MAX_ALLOWED_VERSION=' + glib_max_allowed, language: 'c')
gtk_version = meson.project_version().split('.')
gtk_major_version = gtk_version[0].to_int()
gtk_minor_version = gtk_version[1].to_int()
gtk_micro_version = gtk_version[2].to_int()
# Making releases:
# 1. gtk_micro_version += 1;
# 2. gtk_interface_age += 1;
# 3. if any functions have been added, set gtk_interface_age to 0.
# 4. if backwards compatibility has been broken, we're in trouble
gtk_version = meson.project_version()
gtk_major_version = gtk_version.split('.')[0].to_int()
gtk_minor_version = gtk_version.split('.')[1].to_int()
gtk_micro_version = gtk_version.split('.')[2].to_int()
gtk_interface_age = 0
add_global_arguments('-DGTK_VERSION="' + meson.project_version() + '"', language: 'c')
add_project_arguments('-DGTK_VERSION="@0@"'.format(meson.project_version()), language: 'c')
add_project_arguments('-D_GNU_SOURCE', language: 'c')
gtk_debug_cflags = []
buildtype = get_option('buildtype')
if buildtype.startswith('debug')
gtk_debug_cflags += '-DG_ENABLE_DEBUG'
if buildtype == 'debug'
gtk_debug_cflags += '-DG_ENABLE_CONSISTENCY_CHECKS'
endif
elif buildtype == 'release'
gtk_debug_cflags += '-DG_DISABLE_CAST_CHECKS'
endif
add_project_arguments(gtk_debug_cflags, language: 'c')
# Define a string for the earliest version that this release has
# backwards binary compatibility with for all interfaces a module
@ -28,167 +77,344 @@ add_global_arguments('-DGTK_VERSION="' + meson.project_version() + '"', language
gtk_binary_version = '3.0.0'
gtk_binary_age = 100 * gtk_minor_version + gtk_micro_version
gtk_soversion = '0.@0@.@1@'.format(gtk_binary_age - gtk_interface_age, gtk_interface_age)
gtk_api_version = '@0@.0'.format(gtk_major_version)
x11_enabled = get_option('enable-x11-backend')
wayland_enabled = get_option('enable-wayland-backend')
broadway_enabled = get_option('enable-broadway-backend')
mkmarshal = find_program('build_marshal.py')
glib_marshal = find_program('glib-genmarshal')
mkenum = find_program('build_enum.py')
perl = find_program('perl')
glib_mkenums = find_program('glib-mkenums')
x11_enabled = get_option('x11-backend')
wayland_enabled = get_option('wayland-backend')
broadway_enabled = get_option('broadway-backend')
quartz_enabled = get_option('quartz-backend')
win32_enabled = get_option('win32-backend')
os_unix = false
os_linux = false
os_win32 = false
os_darwin = false
if host_machine.system().contains('darwin')
# Some windowing system backends depend on the platform we're
# building for, so we need to ensure they are disabled; in other
# cases, they are the only windowing system available, so we need
# to ensure they are enabled
if host_machine.system() == 'darwin'
os_darwin = true
elif host_machine.system().contains('mingw')
elif host_machine.system() == 'windows'
os_win32 = true
elif host_machine.system().contains('linux')
elif host_machine.system() == 'linux'
os_linux = true
endif
os_unix = not os_win32
if os_darwin
wayland_enabled = false
else
quartz_enabled = false
endif
if os_win32
wayland_enabled = false
x11_enabled = false
else
win32_enabled = false
endif
gtk_prefix = get_option('prefix')
gtk_includedir = join_paths(gtk_prefix, get_option('includedir'))
gtk_libdir = join_paths(gtk_prefix, get_option('libdir'))
gtk_datadir = join_paths(gtk_prefix, get_option('datadir'))
gtk_localedir = join_paths(gtk_prefix, get_option('localedir'))
gtk_sysconfdir = join_paths(gtk_prefix, get_option('sysconfdir'))
gtk_applicationsdir = join_paths(gtk_datadir, 'applications')
gtk_schemasdir = join_paths(gtk_datadir, 'glib-2.0/schemas')
gtk_appdatadir = join_paths(gtk_datadir, 'metainfo')
cc = meson.get_compiler('c')
cdata = configuration_data()
cdata.set('PACKAGE_VERSION', '"'+meson.project_version()+'"')
cdata.set('GTK_LOCALEDIR', '"'+get_option('localedir')+'"')
cdata.set('GTK_DATADIR', '"'+get_option('datadir')+'"')
cdata.set('GTK_LIBDIR', '"'+get_option('libdir')+'"')
cdata.set('GETTEXT_PACKAGE', '"gtk30"')
cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
cdata.set_quoted('GTK_LOCALEDIR', gtk_localedir)
cdata.set_quoted('GTK_DATADIR', gtk_datadir)
cdata.set_quoted('GTK_LIBDIR', gtk_libdir)
cdata.set_quoted('GTK_SYSCONFDIR', gtk_sysconfdir)
cdata.set_quoted('GETTEXT_PACKAGE', 'gtk30')
cdata.set('GTK_MAJOR_VERSION', gtk_major_version)
cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
cdata.set('GTK_BINARY_AGE', gtk_binary_age)
cdata.set('GTK_INTERFACE_AGE', gtk_interface_age)
check_headers = [
['HAVE_CRT_EXTERNS_H', 'crt/externs.h'],
['HAVE_DLFCN_H', 'dlfcn.h'],
['HAVE_FTW_H', 'ftw.h'],
['HAVE_INTTYPES_H', 'inttypes.h'],
['HAVE_LOCALE_H', 'locale.h'],
['HAVE_MEMORY_H', 'memory.h'],
['HAVE_STDINT_H', 'stdint.h'],
['HAVE_STDLIB_H', 'stdlib.h'],
['HAVE_STRINGS_H', 'strings.h'],
['HAVE_STRING_H', 'string.h'],
['HAVE_SYS_MMAN_H', 'sys/mman.h'],
['HAVE_SYS_PARAM_H', 'sys/param.h'],
['HAVE_SYS_STAT_H', 'sys/stat.h'],
['HAVE_SYS_SYSINFO_H', 'sys/sysinfo.h'],
['HAVE_SYS_SYSTEMINFO_H', 'sys/systeminfo.h'],
['HAVE_SYS_TIME_H', 'sys/time.h'],
['HAVE_SYS_TYPES_H', 'sys/types.h'],
['HAVE_UNISTD_H', 'unistd.h'],
['HAVE_LINUX_MEMFD_H', 'linux/memfd.h'],
'crt/externs.h',
'dlfcn.h',
'ftw.h',
'inttypes.h',
'linux/memfd.h',
'linux/input.h',
'dev/evdev/input.h',
'locale.h',
'memory.h',
'stdint.h',
'stdlib.h',
'string.h',
'strings.h',
'sys/mman.h',
'sys/param.h',
'sys/stat.h',
'sys/sysinfo.h',
'sys/systeminfo.h',
'sys/time.h',
'sys/types.h',
'unistd.h',
]
foreach h : check_headers
if cc.has_header(h.get(1))
cdata.set(h.get(0), 1)
if cc.has_header(h)
cdata.set('HAVE_' + h.underscorify().to_upper(), 1)
endif
endforeach
# Maths functions might be implemented in libm
libm = cc.find_library('m', required: false)
check_functions = [
# check token HAVE_BIND_TEXTDOMAIN_CODESET
# check token HAVE_CUPS_API_1_6
['HAVE_DCGETTEXT', 'dcgettext', '#include<libintl.h>'],
['HAVE_DECL_ISINF', 'isinf', '#include<math.h>'],
['HAVE_DECL_ISNAN', 'isnan', '#include<math.h>'],
['HAVE_GETPAGESIZE', 'getpagesize', '#include<unistd.h>'],
['HAVE_GETRESUID', 'getresuid', '#include<unistd.h>'],
# check token HAVE_GETTEXT
# check token HAVE_GIO_UNIX
# check token HAVE_GNU_FTW
# check token HAVE_HTTPGETAUTHSTRING
# check token HAVE_HTTP_AUTHSTRING
# check token HAVE_IPRINTDIALOGCALLBACK
# check token HAVE_LC_MESSAGES
# check token HAVE_LOCALTIME_R
['HAVE_LSTAT', 'lstat', '#include<sys/stat.h>'],
['HAVE_MMAP', 'mmap', '#include<sys/mman.h>'],
['HAVE_NEARBYINT', 'nearbyint', '#include<math.h>'],
['HAVE_POSIX_FALLOCATE', 'posix_fallocate', '#include<fcntl.h>'],
['HAVE__LOCK_FILE', '_lock_file', '#include<stdio.h>'],
['HAVE_FLOCKFILE', 'flockfile', '#include<stdio.h>'],
['HAVE_MKSTEMP', 'mkstemp', '#include<stdlib.h>'],
['HAVE_MALLINFO', 'mallinfo', '#include<malloc.h>'],
['HAVE_ROUND', 'round', '#include<math.h>'],
['HAVE_RINT', 'rint', '#include<math.h>'],
['HAVE_LOG2', 'log2', '#include<math.h>'],
['HAVE_EXP2', 'exp2', '#include<math.h>'],
['HAVE_SINCOS', 'sincos', '#include<math.h>'],
['HAVE_XKB', 'XkbQueryExtension', '#include<X11/XKBlib.h>'],
# check token HAVE_SOCKADDR_UN_SUN_LEN
# check token HAVE_SOLARIS_XINERAMA
# check token HAVE_XFREE_XINERAMA
# check token HAVE_XINERAMA
# check token HAVE__NL_MEASUREMENT_MEASUREMENT
# check token HAVE__NL_PAPER_HEIGHT
# check token HAVE__NL_PAPER_WIDTH
# check token HAVE__NL_TIME_FIRST_WEEKDAY
# check token HAVE__NSGETENVIRON
'dcgettext',
'getpagesize',
'getresuid',
'lstat',
'mmap',
'nearbyint',
'posix_fallocate',
'_lock_file',
'flockfile',
'mkstemp',
'mallinfo',
'round',
'rint',
'log2',
'exp2',
'sincos',
'trunc',
]
if x11_enabled
check_functions += [
['HAVE_XGENERICEVENTS', 'XGetEventData', '#include<X11/Xlib.h>'],
['HAVE_XSYNC', 'XSyncQueryExtension', '#include<X11/Xlib.h>\n#include</usr/include/X11/extensions/sync.h>']
]
endif
foreach f : check_functions
if cc.has_function(f.get(1), prefix : f.get(2))
cdata.set(f.get(0), 1)
foreach func : check_functions
if cc.has_function(func, dependencies: libm)
cdata.set('HAVE_' + func.underscorify().to_upper(), 1)
endif
endforeach
#
cdata.set('HAVE_DECL_ISINF', cc.has_header_symbol('math.h', 'isinf'))
cdata.set('HAVE_DECL_ISNAN', cc.has_header_symbol('math.h', 'isnan'))
# Disable deprecation checks for all libraries we depend on on stable branches.
# This is so newer versions of those libraries don't cause more warnings with
# a stable GTK version.
# We don't ever want to turn off deprecation warnings for master however, because
# that's where we get rid of deprecated API we use.
if gtk_minor_version % 2 == 0
if gtk_minor_version.is_even()
cdata.set('GLIB_DISABLE_DEPRECATION_WARNINGS', 1)
endif
# Compiler flags
if cc.get_id() == 'msvc'
# Compiler options taken from msvc_recommended_pragmas.h
# in GLib, based on _Win32_Programming_ by Rector and Newcomer
test_cflags = []
add_project_arguments('-FImsvc_recommended_pragmas.h', language: 'c')
add_project_arguments('-D_USE_MATH_DEFINES', language: 'c')
elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
test_cflags = [
'-fno-strict-aliasing',
'-Wpointer-arith',
'-Wimplicit-function-declaration',
'-Wformat=2',
'-Wformat-security',
'-Wnested-externs',
'-Wold-style-definition',
'-Wundef',
'-Wunused',
'-Wcast-align',
'-Wmissing-noreturn',
'-Wmissing-format-attribute',
'-Wmissing-include-dirs',
'-Wlogical-op',
'-Wignored-qualifiers',
'-Werror=implicit',
'-Werror=nonnull',
'-Werror=init-self',
'-Werror=main',
'-Werror=missing-braces',
'-Werror=sequence-point',
'-Werror=return-type',
'-Werror=trigraphs',
'-Werror=array-bounds',
'-Werror=write-strings',
'-Werror=address',
'-Werror=int-to-pointer-cast',
'-Werror=pointer-to-int-cast',
'-Werror=empty-body',
'-Werror=write-strings',
]
else
test_cflags = []
endif
common_cflags = cc.get_supported_arguments(test_cflags)
# Symbol visibility
if get_option('default_library') != 'static'
if os_win32
cdata.set('DLL_EXPORT', true)
cdata.set('_GDK_EXTERN', '__declspec(dllexport) extern')
if cc.get_id() != 'msvc'
common_cflags += ['-fvisibility=hidden']
endif
else
cdata.set('_GDK_EXTERN', '__attribute__((visibility("default"))) extern')
common_cflags += ['-fvisibility=hidden']
endif
endif
common_ldflags = []
if os_unix and not os_darwin
foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
if cc.links('int main () { return 0; }', name: ldflag, args: ldflag)
common_ldflags += [ ldflag ]
endif
endforeach
endif
# Maintain compatibility with autotools
if os_darwin
common_ldflags += [ '-compatibility_version 1', '-current_version 1.0', ]
endif
confinc = include_directories('.')
gdkinc = include_directories('gdk')
gtkinc = include_directories('gtk')
testinc = include_directories('tests')
glib_dep = dependency('glib-2.0', version: '>= 2.49.4')
giounix_dep = dependency('gio-unix-2.0', required : false)
pango_dep = dependency('pango', version: '>=1.37.3')
pangoft_dep = dependency('pangoft2', required: wayland_enabled or x11_enabled)
cairo_dep = dependency('cairo', version: '>= 1.14.0')
pangocairo_dep = dependency('pangocairo')
cairogobj_dep = dependency('cairo-gobject')
pixbuf_dep = dependency('gdk-pixbuf-2.0', version: '>= 2.30.0')
epoxy_dep = dependency('epoxy', version: '>= 1.0')
atk_dep = dependency('atk', version: '>= 2.15.1')
atkbridge_dep = dependency('atk-bridge-2.0')
gmodule_dep = dependency('gmodule-2.0')
colord_dep = dependency('colord', version: '>= 0.1.9', required: false)
fontconfig_dep = dependency('fontconfig')
harfbuzz_dep = dependency('harfbuzz', version: '>= 0.9', required: false)
xkbdep = dependency('xkbcommon', version: '>= 0.2.0')
# Dependencies
glib_dep = dependency('glib-2.0', version: glib_req,
fallback : ['glib', 'libglib_dep'])
gobject_dep = dependency('gobject-2.0', version: glib_req,
fallback : ['glib', 'libgobject_dep'])
if os_win32
giowin32_dep = dependency('gio-windows-2.0', version: glib_req, required: win32_enabled,
fallback : ['glib', 'libgio_dep'])
endif
if os_unix
giounix_dep = dependency('gio-unix-2.0', version: glib_req, required: false,
fallback : ['glib', 'libgio_dep'])
endif
gmodule_dep = dependency('gmodule-2.0', version: glib_req,
fallback : ['glib', 'libgmodule_dep'])
cairo_dep = dependency('cairo', version: cairo_req, required : cc.get_id() != 'msvc')
cairogobj_dep = dependency('cairo-gobject', version: cairo_req, required : cc.get_id() != 'msvc')
pango_dep = dependency('pango', version: pango_req,
fallback : ['pango', 'libpango_dep'])
if wayland_enabled
wlclientdep = dependency('wayland-client', version: '>= 1.9.91')
wlprotocolsdep = dependency('wayland-protocols', version: '>= 1.7')
wlcursordep = dependency('wayland-cursor', version: '>= 1.9.91')
wlegldep = dependency('wayland-egl')
# Require PangoFT2 if on X11 or wayland
require_pangoft2 = wayland_enabled or x11_enabled
pangoft_dep = dependency('pangoft2', required: require_pangoft2,
fallback : ['pango', 'libpangoft2_dep'])
if pangoft_dep.found()
# Need at least 2.7.1 for FT_Get_Var_Design_Coordinates()
# We get the dependency itself from pango, but pango doesn't care
# about ft2 version, so an extra check is needed.
ft2_dep = dependency('freetype2', version: '>= 2.7.1', required: require_pangoft2)
endif
if win32_enabled
# for GTK_IM_CONTEXT_IME
pangowin32_dep = dependency('pangowin32')
endif
pangocairo_dep = dependency('pangocairo', version: cairo_req,
fallback : ['pango', 'libpangocairo_dep'])
pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req,
fallback : ['gdk-pixbuf', 'gdkpixbuf_dep'])
epoxy_dep = dependency('epoxy', version: epoxy_req,
fallback: ['libepoxy', 'libepoxy_dep'])
atk_dep = dependency('atk', version: atk_req)
harfbuzz_dep = dependency('harfbuzz', version: '>= 0.9', required: false,
fallback: ['harfbuzz', 'libharfbuzz_dep'])
xkbdep = dependency('xkbcommon', version: xkbcommon_req, required: wayland_enabled)
iso_codes_dep = dependency('iso-codes', required: false)
fontconfig_dep = [] # only used in x11 backend
atkbridge_dep = [] # only used in x11 backend
if os_win32
platform_gio_dep = giowin32_dep
endif
if os_unix
platform_gio_dep = giounix_dep
endif
if iso_codes_dep.found()
cdata.set_quoted('ISO_CODES_PREFIX', iso_codes_dep.get_pkgconfig_variable('prefix'))
else
cdata.set_quoted('ISO_CODES_PREFIX', '/usr')
endif
backend_immodules = []
pc_gdk_extra_libs = []
cairo_backends = []
foreach backend: [ ['cairo-xlib', cairo_req, x11_enabled],
['cairo-win32', cairo_req, win32_enabled],
['cairo-quartz', cairo_req, quartz_enabled],
['cairo', cairo_req, broadway_enabled or wayland_enabled], ]
backend_enabled = backend.get(2)
cairo_backend_req = backend.get(1)
cairo_backend = backend.get(0)
if backend_enabled
if dependency(cairo_backend, version: cairo_backend_req, required : cc.get_id() != 'msvc').found()
cairo_backends += [ cairo_backend ]
endif
endif
endforeach
cairo_pkg_found = false
cairogobj_pkg_found = false
if cairo_dep.found()
cairo_pkg_found = true
endif
if cairogobj_dep.found()
cairogobj_pkg_found = true
endif
cairo_libs = []
cdata.set('HAVE_HARFBUZZ', harfbuzz_dep.found())
cdata.set('HAVE_PANGOFT', pangoft_dep.found())
atk_pkgs = ['atk']
wayland_pkgs = []
if wayland_enabled
wlclientdep = dependency('wayland-client', version: wayland_req)
wlprotocolsdep = dependency('wayland-protocols', version: wayland_proto_req)
wlcursordep = dependency('wayland-cursor', version: wayland_req)
wlegldep = dependency('wayland-egl')
backend_immodules += ['wayland']
wayland_pkgs = [
'wayland-client', wayland_req,
'wayland-protocols', wayland_proto_req,
'xkbcommon', xkbcommon_req,
'wayland-cursor', wayland_req,
'wayland-egl',
]
endif
x11_pkgs = []
if x11_enabled
xrandr_dep = dependency('xrandr', version: '>= 1.2.99')
xrandr15_dep = dependency('xrandr', version: '>= 1.5', required: false)
@ -200,67 +426,275 @@ if x11_enabled
xdamage_dep = dependency('xdamage', required: false)
xfixes_dep = dependency('xfixes', required: false)
xcomposite_dep = dependency('xcomposite', required: false)
fontconfig_dep = dependency('fontconfig')
atkbridge_dep = dependency('atk-bridge-2.0', version: atk_req)
backend_immodules += ['xim']
if xdamage_dep.found()
cdata.set('HAVE_XDAMAGE', 1)
endif
x11_pkgs = ['fontconfig', 'x11', 'xext', 'xi', 'xrandr']
if xcursor_dep.found()
cdata.set('HAVE_XCURSOR', 1)
x11_pkgs += ['xcursor']
endif
if xcomposite_dep.found()
cdata.set('HAVE_XCOMPOSITE', 1)
endif
if xfixes_dep.found()
cdata.set('HAVE_XFIXES', 1)
x11_pkgs += ['xfixes']
endif
if xcomposite_dep.found()
x11_pkgs += ['xcomposite']
endif
if xdamage_dep.found()
x11_pkgs += ['xdamage']
endif
atk_pkgs += ['atk-bridge-2.0']
cdata.set('HAVE_XDAMAGE', xdamage_dep.found())
cdata.set('HAVE_XCURSOR', xcursor_dep.found())
cdata.set('HAVE_XCOMPOSITE', xcomposite_dep.found())
cdata.set('HAVE_XFIXES', xfixes_dep.found())
if xi_dep.found() and cc.has_header('X11/extensions/XInput2.h')
if cc.has_function('XkbQueryExtension', dependencies: x11_dep,
prefix : '#include <X11/XKBlib.h>')
cdata.set('HAVE_XKB', 1)
endif
if cc.has_function('XSyncQueryExtension', dependencies: xext_dep,
prefix: '''#include <X11/Xlib.h>
#include <X11/extensions/sync.h>''')
cdata.set('HAVE_XSYNC', 1)
endif
if cc.has_function('XGetEventData', dependencies: x11_dep)
cdata.set('HAVE_XGENERICEVENTS', 1)
endif
if xi_dep.found() and cc.has_header('X11/extensions/XInput2.h', dependencies: xi_dep)
cdata.set('XINPUT_2', 1)
prefix = '#include<X11/Xlib.h>\n#include<X11/extensions/XInput2.h>'
if cc.has_function('XIAllowTouchEvents', prefix: prefix) and cc.has_member('XIScrollClassInfo', 'number', prefix: prefix)
# Note that we also check that the XIScrollClassInfo struct is defined,
# because at least Ubuntu Oneiric seems to have XIAllowTouchEvents(),
# but not the XIScrollClassInfo struct
has_allow_touch_evens = cc.has_function('XIAllowTouchEvents', dependencies: xi_dep)
has_scroll_class_info = cc.has_member('XIScrollClassInfo', 'number', dependencies: xi_dep,
prefix: '''#include <X11/Xlib.h>
#include <X11/extensions/XInput2.h>''')
if has_allow_touch_evens and has_scroll_class_info
cdata.set('XINPUT_2_2', 1)
endif
endif
if xrandr_dep.found()
cdata.set('HAVE_RANDR', 1)
enable_xinerama = get_option('xinerama')
if enable_xinerama != 'no'
want_xinerama = enable_xinerama == 'yes'
xinerama_dep = dependency('xinerama', required: want_xinerama)
if xinerama_dep.found() and cc.has_header_symbol('X11/extensions/Xinerama.h', 'XineramaQueryExtension', dependencies: xinerama_dep)
cdata.set('HAVE_XFREE_XINERAMA', 1)
x11_pkgs += ['xinerama']
endif
else
xinerama_dep = []
endif
if xrandr15_dep.found()
cdata.set('HAVE_RANDR15', 1)
cdata.set('HAVE_RANDR', xrandr_dep.found())
cdata.set('HAVE_RANDR15', xrandr15_dep.found())
endif
if broadway_enabled
pc_gdk_extra_libs += ['-lz']
backend_immodules += ['broadway']
endif
if quartz_enabled
pc_gdk_extra_libs += ['-framework Cocoa', '-framework Carbon']
backend_immodules += ['quartz']
endif
extra_demo_ldflags = []
if win32_enabled
pc_gdk_extra_libs += ['-lgdi32', '-limm32', '-lshell32', '-lole32']
if cc.get_id() == 'msvc'
# Since the demo programs are now built as pure GUI programs, we
# need to pass in /entry:mainCRTStartup so that they will properly
# link on Visual Studio builds
extra_demo_ldflags = ['/entry:mainCRTStartup']
else
pc_gdk_extra_libs += ['-Wl,-luuid']
endif
pc_gdk_extra_libs += ['-lwinmm', '-ldwmapi', '-lsetupapi', '-lcfgmgr32']
backend_immodules += ['ime']
endif
# Check for bind_textdomain_codeset, including -lintl if GLib brings it in by
# doing the same check as glib. We can't check that by linking to glib because
# it might be a subproject and hence not built yet.
if cc.has_function('ngettext')
libintl_dep = []
cdata.set('HAVE_BIND_TEXTDOMAIN_CODESET', 1)
else
libintl_dep = cc.find_library('intl', required : false)
if cc.has_function('bind_textdomain_codeset', dependencies: libintl_dep)
cdata.set('HAVE_BIND_TEXTDOMAIN_CODESET', 1)
else
# Don't use subproject('proxy-libintl').get_variable('intl_dep') because that
# makes the dependency unconditional. This way, people have the option of
# either not providing the subproject or disabling it entirely with
# --wrap-mode=nodownload or nofallback.
libintl_dep = dependency('', required : false,
fallback: ['proxy-libintl', 'intl_dep'])
if libintl_dep.found()
cdata.set('HAVE_BIND_TEXTDOMAIN_CODESET', 1)
endif
endif
endif
mlib = cc.find_library('m', required: false)
shmlib = cc.find_library('rt')
if giounix_dep.found()
cdata.set('HAVE_GIO_UNIX', 1)
if os_unix
cdata.set('HAVE_GIO_UNIX', giounix_dep.found())
endif
if colord_dep.found()
cdata.set('HAVE_COLORD', 1)
cloudproviders_enabled = get_option('cloudproviders')
if cloudproviders_enabled
cloudproviders_dep = dependency('cloudproviders', required: true)
if cloudproviders_dep.found()
cdata.set('HAVE_CLOUDPROVIDERS', cloudproviders_dep.found())
else
error('Cloudproviders support not found, but was explicitly requested.')
endif
endif
if mlib.found()
cdata.set('HAVE_LIBM', 1)
endif
configure_file(
input : 'config.h.meson',
output: 'config.h',
configuration: cdata
)
subdir('gdk')
subdir('gtk')
subdir('demos')
subdir('tests')
subdir('testsuite')
subdir('examples')
subdir('modules')
if get_option('demos')
subdir('demos')
endif
if get_option('build-tests')
subdir('tests')
subdir('testsuite')
endif
if get_option('build-examples')
subdir('examples')
endif
# config.h
configure_file(input: 'config.h.meson',
output: 'config.h',
configuration: cdata)
# pkg-config files - bit of a mess all of this
pkgconf = configuration_data()
pkgconf.set('prefix', get_option('prefix'))
pkgconf.set('exec_prefix', '${prefix}')
pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
pkgconf.set('GTK_API_VERSION', gtk_api_version)
pkgconf.set('VERSION', meson.project_version())
pkgconf.set('GTK_BINARY_VERSION', gtk_binary_version)
pkgconf.set('host', '@0@-@1@'.format(host_machine.cpu_family(), host_machine.system())) # FIXME
# Requires
pango_pkgname = win32_enabled ? 'pangowin32' : 'pango'
gdk_packages = ' '.join([ pango_pkgname, pango_req,
'pangocairo', pango_req,
'gdk-pixbuf-2.0', gdk_pixbuf_req ])
if cairo_pkg_found
gdk_packages += ' '.join([ ' cairo', cairo_req ])
endif
if cairogobj_pkg_found
gdk_packages += ' '.join([ ' cairo-gobject', cairo_req ])
endif
pkgconf.set('GDK_PACKAGES', gdk_packages)
pkgconf.set('GTK_PACKAGES',
' '.join([ 'atk', atk_req,
'gio-2.0', glib_req ]))
# Requires.private
pc_gdk_extra_libs += cairo_libs
gio_pkgname = os_unix ? 'gio-unix-2.0' : 'gio-2.0'
pkgconf.set('GDK_PRIVATE_PACKAGES',
' '.join([ gio_pkgname, glib_req,
'epoxy', epoxy_req ] + x11_pkgs + wayland_pkgs + cairo_backends))
pangoft2_pkgs = (wayland_enabled or x11_enabled) ? ['pangoft2'] : []
pkgconf.set('GTK_PRIVATE_PACKAGES', ' '.join(atk_pkgs + pangoft2_pkgs))
pkgconf.set('GDK_EXTRA_LIBS', ' '.join(pc_gdk_extra_libs))
pkgconf.set('GSK_EXTRA_LIBS', '')
pkgconf.set('GTK_EXTRA_LIBS', '')
pkgconf.set('GDK_EXTRA_CFLAGS', '')
pkgconf.set('GSK_EXTRA_CFLAGS', '')
pkgconf.set('GTK_EXTRA_CFLAGS', '')
pkg_install_dir = join_paths(get_option('libdir'), 'pkgconfig')
pkgs = [ 'gtk+-3.0.pc' ]
pkg_targets = ''
foreach backend: [ 'broadway', 'quartz', 'wayland', 'win32', 'x11', ]
if get_variable('@0@_enabled'.format(backend))
pkgs += ['gtk+-@0@-3.0.pc'.format(backend)]
pkg_targets += ' ' + backend
endif
endforeach
pkgconf.set('GDK_BACKENDS', pkg_targets.strip())
configure_file(input: 'gdk-3.0.pc.in',
output: 'gdk-3.0.pc',
configuration: pkgconf,
install_dir: pkg_install_dir)
foreach pkg: pkgs
configure_file(input: 'gtk+-3.0.pc.in',
output: pkg,
configuration: pkgconf,
install_dir: pkg_install_dir)
endforeach
if os_unix
configure_file(input: 'gtk+-unix-print-3.0.pc.in',
output: 'gtk+-unix-print-3.0.pc',
configuration: pkgconf,
install_dir: pkg_install_dir)
endif
# TODO
#subdir('po')
#subdir('po-properties')
#if get_option('documentation')
# subdir('docs/tools')
# subdir('docs/reference')
#endif
# Keep this in sync with post-install.sh expected arguments
meson.add_install_script('build-aux/meson/post-install.sh',
gtk_api_version,
gtk_binary_version,
gtk_libdir,
gtk_datadir)
summary = [
'',
'------',
'GTK+ @0@ (@1@)'.format(gtk_version, gtk_api_version),
'',
' Display backends: @0@'.format(pkg_targets.strip()),
' Print backends: @0@'.format(' '.join(print_backends)),
' Cloud support: @0@'.format(get_option('cloudproviders')),
' Colord support: @0@'.format(get_option('colord')),
' Introspection: @0@'.format(get_option('introspection')),
' Documentation: @0@'.format(get_option('documentation')),
' Build tests: @0@'.format(get_option('build-tests')),
' Demos: @0@'.format(get_option('demos')),
' Examples: @0@'.format(get_option('build-examples')),
'Directories:',
' prefix: @0@'.format(gtk_prefix),
' includedir: @0@'.format(gtk_includedir),
' libdir: @0@'.format(gtk_libdir),
' datadir: @0@'.format(gtk_datadir),
'------',
''
]
message('\n'.join(summary))

View File

@ -1,3 +1,39 @@
option('enable-x11-backend', type: 'boolean', value: 'true')
option('enable-wayland-backend', type: 'boolean', value: 'true')
option('enable-broadway-backend', type: 'boolean', value: 'false')
# GDK backends
option('x11-backend', type: 'boolean', value: true,
description : 'Enable the X11 gdk backend (only when building on Unix)')
option('wayland-backend', type: 'boolean', value: true,
description : 'Enable the wayland gdk backend (only when building on Unix except for macOS)')
option('broadway-backend', type: 'boolean', value: false,
description : 'Enable the broadway (HTML5) gdk backend')
option('win32-backend', type: 'boolean', value: true,
description : 'Enable the Windows gdk backend (only when building on Windows)')
option('quartz-backend', type: 'boolean', value: true,
description : 'Enable the macOS gdk backend (only when building on macOS)')
# Optional dependencies
option('xinerama', type: 'combo', choices : ['yes', 'no', 'auto'], value : 'auto',
description : 'Enable support for the Xinerama extension')
option('cloudproviders', type: 'boolean', value: false,
description : 'Enable the cloudproviders support')
# Print backends
option('print-backends', type : 'string', value : 'cups,file',
description : 'Build the specified print backends (comma-separated list, "all", or "none")')
option('colord', type: 'combo', choices : ['yes', 'no', 'auto'], value : 'auto',
description : 'Build colord support for the CUPS printing backend')
# Documentation and introspection
option('documentation', type: 'boolean', value: 'false',
description : 'Build API reference and tools documentation')
option('man-pages', type: 'boolean', value: 'false',
description : 'Build man pages for installed tools')
option('introspection', type: 'boolean', value: 'true',
description : 'Build introspection data (requires gobject-introspection)')
# Demos and binaries
option('demos', type: 'boolean', value: 'true',
description : 'Build demo programs')
option('build-examples', type: 'boolean', value: 'true',
description : 'Build examples')
option('build-tests', type: 'boolean', value: 'true',
description : 'Build tests')

8
modules/meson.build Normal file
View File

@ -0,0 +1,8 @@
# TODO
#if os_unix
# subdir('printbackends')
#else
print_backends = []
#endif
#subdir('input')

View File

@ -1,24 +1,24 @@
test_cairo = executable('cairo', 'cairo.c', dependencies: libgdk_dep)
test_cairo = executable('cairo', 'cairo.c', dependencies: libgtk_dep)
test('gdk/cairo', test_cairo)
test_display = executable('display', 'display.c', dependencies: libgdk_dep)
test_display = executable('display', 'display.c', dependencies: libgtk_dep)
test('gdk/display', test_display)
test_encoding = executable('encoding', 'encoding.c', dependencies: libgdk_dep)
test_encoding = executable('encoding', 'encoding.c', dependencies: libgtk_dep)
test('gdk/encoding', test_encoding)
test_keysyms = executable('keysyms', 'keysyms.c', dependencies: libgdk_dep)
test_keysyms = executable('keysyms', 'keysyms.c', dependencies: libgtk_dep)
test('gdk/keysyms', test_keysyms)
test_rectangle = executable('rectangle', 'rectangle.c', dependencies: libgdk_dep)
test_rectangle = executable('rectangle', 'rectangle.c', dependencies: libgtk_dep)
test('gdk/rectangle', test_rectangle)
test_rgba = executable('rgba', 'rgba.c', dependencies: libgdk_dep)
test_rgba = executable('rgba', 'rgba.c', dependencies: libgtk_dep)
test('gdk/rgba', test_rgba)
test_seat = executable('seat', 'seat.c', dependencies: libgdk_dep)
test_seat = executable('seat', 'seat.c', dependencies: libgtk_dep)
test('gdk/seat', test_seat)
test_visual = executable('visual', 'visual.c', dependencies: libgdk_dep)
test_visual = executable('visual', 'visual.c', dependencies: libgtk_dep)
test('gdk/visual', test_visual)

View File

@ -1,150 +1,109 @@
test_accel = executable('accel', 'accel.c', dependencies: libgtk_dep)
test('gtk/accel test', test_accel)
gtk_tests_export_dynamic_ldflag = []
test_accessible = executable('accessible', 'accessible.c', dependencies: libgtk_dep)
test('gtk/accessible test', test_accessible)
if cc.get_id() != 'msvc'
gtk_tests_export_dynamic_ldflag = ['-Wl,--export-dynamic']
endif
test_action = executable('action', 'action.c', dependencies: libgtk_dep)
test('gtk/action test', test_action)
tests = [
['accel'],
['accessible'],
['action'],
['adjustment'],
['bitmask', ['../../gtk/gtkallocatedbitmask.c'], ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG']],
['builder', [], [], gtk_tests_export_dynamic_ldflag],
['builderparser'],
['cellarea'],
['check-icon-names'],
['check-cursor-names'],
['cssprovider'],
['defaultvalue'],
['entry'],
['firefox-stylecontext'],
['floating'],
['focus'],
['gestures'],
['grid'],
['gtkmenu'],
['icontheme'],
['keyhash', ['../../gtk/gtkkeyhash.c', gtkresources, '../../gtk/gtkprivate.c'], gtk_cargs],
['listbox'],
['notify'],
['no-gtk-init'],
['object'],
['papersize'],
['rbtree', ['../../gtk/gtkrbtree.c'], ['-DGTK_COMPILATION', '-UG_ENABLE_DEBUG']],
['recentmanager'],
['regression-tests'],
['scrolledwindow'],
['spinbutton'],
['stylecontext'],
['templates'],
['textbuffer'],
['textiter'],
['treemodel', ['treemodel.c', 'liststore.c', 'treestore.c', 'filtermodel.c',
'modelrefcount.c', 'sortmodel.c', 'gtktreemodelrefcount.c']],
['treepath'],
['treeview'],
['typename'],
['window'],
['displayclose'],
['revealer-size'],
]
test_cargs = []
test_adjustment = executable('adjustment', 'adjustment.c', dependencies: libgtk_dep)
test('gtk/adjustment test', test_adjustment)
if os_unix
# tests += [['defaultvalue']] # disabled in Makefile.am as well
test_cargs += ['-DHAVE_UNIX_PRINT_WIDGETS']
endif
test_bitmask = executable('bitmask', 'bitmask.c', dependencies: libgtk_dep)
test('gtk/bitmask test', test_bitmask)
test_builder = executable('builder', 'builder.c', dependencies: libgtk_dep)
test('gtk/builder test', test_builder)
test_builderparser = executable(
'builderparser',
'builderparser.c',
dependencies: libgtk_dep,
link_with: libgtk,
)
test(
'gtk/builderparser test',
test_builderparser,
env: [
'G_TEST_SRCDIR='+meson.source_root(),
'G_TEST_BUILDDIR='+meson.build_root()
if x11_enabled
tests += [
['clipboard'],
['objects-finalize', ['../../gdk/x11/gdkdisplaymanager-x11.c'], ['-DGDK_COMPILATION', '-UG_ENABLE_DEBUG']],
]
)
endif
test_cellarea = executable('cellarea', 'cellarea.c', dependencies: libgtk_dep)
test('gtk/cellarea test', test_cellarea)
foreach t : tests
test_name = t.get(0)
test_srcs = ['@0@.c'.format(test_name)] + t.get(1, [])
test_extra_cargs = t.get(2, [])
test_extra_ldflags = t.get(3, [])
test_check_icon_names = executable('check_icon_names', 'check-icon-names.c', dependencies: libgtk_dep)
test('gtk/check_icon_names test', test_check_icon_names)
test_exe = executable(test_name, test_srcs,
c_args : test_cargs + test_extra_cargs,
link_args : test_extra_ldflags,
dependencies : libgtk_dep)
test_check_cursor_names = executable('check_cursor_names', 'check-cursor-names.c', dependencies: libgtk_dep)
test('gtk/check_cursor_names test', test_check_cursor_names)
test(test_name, test_exe,
args: [ '--tap', '-k' ],
env: [ 'GIO_USE_VOLUME_MONITOR=unix',
'GSETTINGS_BACKEND=memory',
'GTK_CSD=1',
'G_ENABLE_DIAGNOSTIC=0',
'GSK_RENDERER=cairo',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
'GSETTINGS_SCHEMA_DIR=@0@'.format(gtk_schema_build_dir),
],
suite: 'gtk')
endforeach
test_clipboard = executable('clipboard', 'clipboard.c', dependencies: libgtk_dep)
test('gtk/clipboard test', test_clipboard)
test_cssprovider = executable('cssprovider', 'cssprovider.c', dependencies: libgtk_dep)
test('gtk/cssprovider test', test_cssprovider)
test_defaultvalue = executable('defaultvalue', 'defaultvalue.c', dependencies: libgtk_dep)
test('gtk/defaultvalue test', test_defaultvalue)
test_entry = executable('entry', 'entry.c', dependencies: libgtk_dep)
test('gtk/entry test', test_entry)
test_firefox_stylecontext = executable('firefox_stylecontext', 'firefox-stylecontext.c', dependencies: libgtk_dep)
test('gtk/firefox_stylecontext test', test_firefox_stylecontext)
test_floating = executable('floating', 'floating.c', dependencies: libgtk_dep)
test('gtk/floating test', test_floating)
test_focus = executable('focus', 'focus.c', dependencies: libgtk_dep)
test('gtk/focus test', test_focus)
test_gestures = executable('gestures', 'gestures.c', dependencies: libgtk_dep)
test('gtk/gestures test', test_gestures)
test_grid = executable('grid', 'grid.c', dependencies: libgtk_dep)
test('gtk/grid test', test_grid)
test_gtkmenu = executable('gtkmenu', 'gtkmenu.c', dependencies: libgtk_dep)
test('gtk/gtkmenu test', test_gtkmenu)
test_icontheme = executable('icontheme', 'icontheme.c', dependencies: libgtk_dep)
test('gtk/icontheme test', test_icontheme)
test_keyhash = executable('keyhash', 'keyhash.c', dependencies: libgtk_dep)
test('gtk/keyhash test', test_keyhash)
test_listbox = executable('listbox', 'listbox.c', dependencies: libgtk_dep)
test('gtk/listbox test', test_listbox)
test_notify = executable('notify', 'notify.c', dependencies: libgtk_dep)
test('gtk/notify test', test_notify)
test_no_gtk_init = executable('no_gtk_init', 'no-gtk-init.c', dependencies: libgtk_dep)
test('gtk/no_gtk_init test', test_no_gtk_init)
test_object = executable('object', 'object.c', dependencies: libgtk_dep)
test('gtk/object test', test_object)
test_objects_finalize = executable('objects_finalize', 'objects-finalize.c', dependencies: libgtk_dep)
test('gtk/objects_finalize test', test_objects_finalize)
test_papersize = executable('papersize', 'papersize.c', dependencies: libgtk_dep)
test('gtk/papersize test', test_papersize)
test_rbtree = executable('rbtree', 'rbtree.c', dependencies: libgtk_dep)
test('gtk/rbtree test', test_rbtree)
test_recentmanager = executable('recentmanager', 'recentmanager.c', dependencies: libgtk_dep)
test('gtk/recentmanager test', test_recentmanager)
test_regression_tests = executable('regression_tests', 'regression-tests.c', dependencies: libgtk_dep)
test('gtk/regression_tests test', test_regression_tests)
test_scrolledwindow = executable('scrolledwindow', 'scrolledwindow.c', dependencies: libgtk_dep)
test('gtk/scrolledwindow test', test_scrolledwindow)
test_spinbutton = executable('spinbutton', 'spinbutton.c', dependencies: libgtk_dep)
test('gtk/spinbutton test', test_spinbutton)
test_stylecontext = executable('stylecontext', 'stylecontext.c', dependencies: libgtk_dep)
test('gtk/stylecontext test', test_stylecontext)
test_templates = executable('templates', 'templates.c', dependencies: libgtk_dep)
test('gtk/templates test', test_templates)
test_textbuffer = executable('textbuffer', 'textbuffer.c', dependencies: libgtk_dep)
test('gtk/textbuffer test', test_textbuffer)
test_textiter = executable('textiter', 'textiter.c', dependencies: libgtk_dep)
test('gtk/textiter test', test_textiter)
test_treemodel = executable(
'treemodel',
'treemodel.c', 'liststore.c', 'treestore.c', 'filtermodel.c',
'modelrefcount.c', 'sortmodel.c', 'gtktreemodelrefcount.c',
dependencies: libgtk_dep
)
test('gtk/treemodel test', test_treemodel)
test_treepath = executable('treepath', 'treepath.c', dependencies: libgtk_dep)
test('gtk/treepath test', test_treepath)
test_treeview = executable('treeview', 'treeview.c', dependencies: libgtk_dep)
test('gtk/treeview test', test_treeview)
test_typename = executable('typename', 'typename.c', dependencies: libgtk_dep)
test('gtk/typename test', test_typename)
test_window = executable('window', 'window.c', dependencies: libgtk_dep)
test('gtk/window test', test_window)
test_displayclose = executable('displayclose', 'displayclose.c', dependencies: libgtk_dep)
test('gtk/displayclose test', test_displayclose)
test_revealer_size = executable('revealer_size', 'revealer-size.c', dependencies: libgtk_dep)
test('gtk/revealer_size test', test_revealer_size)
# FIXME: if objc autotestkeywords_CPPFLAGS += -DHAVE_OBJC=1 -x objective-c++
if add_languages('cpp', required: false)
test_exe = executable('autotestkeywords',
'autotestkeywords.cc',
c_args : test_cargs + ['-Idummy-headers'],
dependencies : libgtk_dep)
test('c++ keywords', test_exe,
args: [ '--tap', '-k' ],
env: [ 'GIO_USE_VOLUME_MONITOR=unix',
'GSETTINGS_BACKEND=memory',
'GTK_CSD=1',
'G_ENABLE_DIAGNOSTIC=0',
'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
'GSETTINGS_SCHEMA_DIR=@0@'.format(gtk_schema_build_dir),
],
suite: 'gtk')
endif