[gtk+/wip/meson: 80/135] meson: generate .pc files
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/meson: 80/135] meson: generate .pc files
- Date: Fri, 28 Apr 2017 22:20:07 +0000 (UTC)
commit 925941289d05977a4c825f52f6c6f104a4150d5e
Author: Tim-Philipp Müller <tim centricular com>
Date: Wed Mar 22 00:15:31 2017 +0000
meson: generate .pc files
config.h.meson | 3 -
gtk/meson.build | 2 +-
meson.build | 244 +++++++++++++++++++++++++++++++++++++++++++------------
3 files changed, 193 insertions(+), 56 deletions(-)
---
diff --git a/config.h.meson b/config.h.meson
index 55e026a..122a1f3 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -71,9 +71,6 @@
/* 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
diff --git a/gtk/meson.build b/gtk/meson.build
index 6ecf5e8..d667a6c 100644
--- a/gtk/meson.build
+++ b/gtk/meson.build
@@ -826,7 +826,7 @@ endif
# org.gtk.Settings.Debug.gschema.xml
gnome.compile_schemas()
-libgtk = shared_library('gtk',
+libgtk = shared_library('gtk-4',
sources: [typefuncs, gtk_sources, gtkmarshal_h, gtkprivatetypebuiltins_h],
c_args: gtk_cargs,
include_directories: [confinc, gdkinc, gtkinc],
diff --git a/meson.build b/meson.build
index 44acccd..7cda424 100644
--- a/meson.build
+++ b/meson.build
@@ -1,12 +1,25 @@
-project('gtk+-3.0', 'c',
- version: '3.90.0',
+project('gtk+-4.0', 'c',
+ version: '3.89.50',
default_options: [
'buildtype=debugoptimized',
'warning_level=1'
],
- meson_version : '>= 0.38.1', # for array.get() with fallback
+ meson_version : '>= 0.39.1',
license: 'LGPLv2.1+')
+glib_req = '>= 2.49.4'
+pango_req = '>= 1.37.3'
+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.7'
+wayland_req = '>= 1.9.91'
+mirclient_req = '>= 0.22.0'
+mircookie_req = '>= 0.17.0'
+graphene_req = '>= 1.5.1'
+epoxy_req = '>= 1.0'
+
gnome = import('gnome')
# FIXME: add GLIB_MIN_REQUIRED_VERSION and GLIB_MAX_ALLOWED_VERSION
@@ -14,10 +27,15 @@ add_project_arguments('-DG_LOG_USE_STRUCTURED=1', language: 'c')
add_project_arguments('-DG_ENABLE_DEBUG', language: 'c')
add_project_arguments('-DG_ENABLE_CONSISTENCY_CHECKS', 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_project_arguments('-DGTK_VERSION="' + meson.project_version() + '"', language: 'c')
@@ -28,10 +46,11 @@ add_project_arguments('-D_GNU_SOURCE', language : 'c')
# might. Unless we add module-only API with lower stability
# guarantees, this should be unchanged until we break binary compat
# for GTK+.
-gtk_binary_version = '3.0.0'
+gtk_binary_version = '4.0.0'
gtk_binary_age = 100 * gtk_minor_version + gtk_micro_version
-gtk_api_version = '@0@.0'.format(gtk_major_version)
+
+gtk_api_version = '4.0'
x11_enabled = get_option('enable-x11-backend')
wayland_enabled = get_option('enable-wayland-backend')
@@ -166,31 +185,57 @@ confinc = include_directories('.')
gdkinc = include_directories('gdk')
gtkinc = include_directories('gtk')
-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')
+glib_dep = dependency('glib-2.0', version: glib_req)
+giounix_dep = dependency('gio-unix-2.0', version: glib_req, required : false)
+pango_dep = dependency('pango', version: pango_req)
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')
+cairo_dep = dependency('cairo', version: cairo_req)
+pangocairo_dep = dependency('pangocairo', version: cairo_req)
+cairogobj_dep = dependency('cairo-gobject', version: cairo_req)
+pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req)
+epoxy_dep = dependency('epoxy', version: epoxy_req)
+atk_dep = dependency('atk', version: atk_req)
+gmodule_dep = dependency('gmodule-2.0', version: glib_req)
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')
-graphene_dep = dependency('graphene-1.0', fallback : ['graphene', 'graphene_dep'])
+graphene_dep = dependency('graphene-1.0', version: graphene_req,
+ fallback : ['graphene', 'graphene_dep'])
+fontconfig_dep = [] # only used in x11 backend
+atkbridge_dep = [] # only used in x11 backend
+
+pc_gdk_extra_libs = []
+
+cairo_backends = []
+foreach backend : [['cairo-xlib', x11_enabled],
+ ['cairo-win32', win32_enabled],
+ ['cairo-quartz', quartz_enabled],
+ ['cairo', broadway_enabled or wayland_enabled or mir_enabled]]
+ if backend[1]
+ dependency(backend[0], version : cairo_req)
+ cairo_backends += [backend[0]]
+ endif
+endforeach
+
+atk_pkgs = ['atk']
+wayland_pkgs = []
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')
+ 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')
+
+ wayland_pkgs = [
+ 'wayland-client', wayland_req,
+ 'wayland-protocols', wayland_proto_req,
+ 'xkbcommon', '>= 0.2.0',
+ '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)
@@ -202,23 +247,33 @@ 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)
- if xdamage_dep.found()
- cdata.set('HAVE_XDAMAGE', 1)
- endif
+ # FIXME: check for xinerama + add to x11_pkgs
+
+ x11_pkgs = ['fontconfig', 'x11', 'xext', 'xi', 'xrandr']
if xcursor_dep.found()
- cdata.set('HAVE_XCURSOR', 1)
+ x11_pkgs += ['xcursor']
+ endif
+ if xfixes_dep.found()
+ x11_pkgs += ['xfixes']
endif
-
if xcomposite_dep.found()
- cdata.set('HAVE_XCOMPOSITE', 1)
+ x11_pkgs += ['xcomposite']
endif
-
- if xfixes_dep.found()
- cdata.set('HAVE_XFIXES', 1)
+ 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 cc.has_function('XkbQueryExtension', dependencies : x11_dep,
prefix : '#include <X11/XKBlib.h>')
cdata.set('HAVE_XKB', 1)
@@ -243,35 +298,42 @@ if x11_enabled
endif
endif
- if xrandr_dep.found()
- cdata.set('HAVE_RANDR', 1)
-
- if xrandr15_dep.found()
- cdata.set('HAVE_RANDR15', 1)
- endif
- endif
+ cdata.set('HAVE_RANDR', xrandr_dep.found())
+ cdata.set('HAVE_RANDR15', xrandr15_dep.found())
endif
+mir_pkgs = []
if mir_enabled
- mirclient_dep = dependency('mirclient', version : '>= 0.22.0')
- mircookie_dep = dependency('mircookie', version : '>= 0.17.0')
+ mirclient_dep = dependency('mirclient', version : mirclient_req)
+ mircookie_dep = dependency('mircookie', version : mircookie_req)
libcontent_hub_glib_dep = dependency('libcontenthub-glib')
-endif
-mlib = cc.find_library('m', required: false)
+ mir_pkgs = [
+ 'mirclient', mirclient_req,
+ 'mircookie', mircookie_req,
+ 'libcontent-hub-glib',
+ ]
+endif
-if giounix_dep.found()
- cdata.set('HAVE_GIO_UNIX', 1)
+if broadway_enabled
+ pc_gdk_extra_libs += ['-lz']
endif
-if colord_dep.found()
- cdata.set('HAVE_COLORD', 1)
+if quartz_enabled
+ pc_gdk_extra_libs += ['-framework Cocoa', '-framework Carbon']
endif
-if mlib.found()
- cdata.set('HAVE_LIBM', 1)
+if win32_enabled
+ pc_gdk_extra_libs += ['-lgdi32', '-limm32', '-lshell32', '-lole32',
+ '-Wl,-luuid', '-lwinmm', '-ldwmapi', '-lsetupapi',
+ '-lcfgmgr32']
endif
+mlib = cc.find_library('m', required: false)
+
+cdata.set('HAVE_GIO_UNIX', giounix_dep.found())
+cdata.set('HAVE_COLORD', colord_dep.found())
+
# Check for Vulkan support
# TODO: move to gsk subfolder maybe? Or will it be used elsewhere too?
have_vulkan = false
@@ -283,7 +345,7 @@ if enable_vulkan != 'no'
glslc = find_program('glslc', required : false)
if glslc.found()
have_vulkan = true
- # FIXME: -lvulkan needs to go into gtk+-4.0.pc (GDK_EXTRA_LIBS)
+ pc_gdk_extra_libs += ['-lvulkan']
else
error('Need glslc for Vulkan support. See https://github.com/google/shaderc or compile with
-Denable-vulkan=no')
endif
@@ -305,3 +367,81 @@ subdir('demos')
subdir('tests')
subdir('testsuite')
subdir('examples')
+
+# 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)
+hm = host_machine
+pkgconf.set('host', '@0@-@1@'.format(hm.cpu_family(), hm.system())) # FIXME
+
+# Requires
+pango_pkgname = win32_enabled ? 'pangowin32' : 'pango'
+pkgconf.set('GDK_PACKAGES', ' '.join([
+ pango_pkgname, pango_req,
+ 'pangocairo', pango_req,
+ 'gdk-pixbuf-2.0', gdk_pixbuf_req,
+ 'cairo', cairo_req,
+ 'cairo-gobject', cairo_req]))
+pkgconf.set('GSK_PACKAGES', ' '.join([
+ #'gdk-pixbuf-2.0', gdk_pixbuf_req,
+ #'cairo', cairo_req,
+ #'cairo-gobject', cairo_req,
+ 'graphene-gobject-1.0', graphene_req]))
+pkgconf.set('GTK_PACKAGES', ' '.join([
+ 'atk', atk_req,
+ #'cairo', cairo_req,
+ #'cairo-gobject', cairo_req,
+ #'gdk-pixbuf-2.0', gdk_pixbuf_req,
+ 'gio-2.0', glib_req]))
+
+# Requires.private
+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 + mir_pkgs + cairo_backends))
+pkgconf.set('GSK_PRIVATE_PACKAGES', '') # all already in GDK_PRIVATE_PACKAGES
+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+-4.0.pc']
+
+pkg_targets = ''
+foreach backend : ['broadway', 'mir', 'quartz', 'wayland', 'win32', 'x11']
+ if get_variable('@0@_enabled'.format(backend))
+ pkgs += ['gtk+-@0 -4 0 pc'.format(backend)]
+ pkg_targets += ' ' + backend
+ endif
+endforeach
+pkgconf.set('GDK_BACKENDS', pkg_targets.strip())
+
+foreach pkg : pkgs
+ configure_file(input : 'gtk+-4.0.pc.in',
+ output : pkg,
+ configuration : pkgconf,
+ install_dir : pkg_install_dir)
+endforeach
+
+if host_machine.system() != 'windows'
+ configure_file(input : 'gtk+-unix-print-4.0.pc.in',
+ output : 'gtk+-unix-print-4.0.pc',
+ configuration : pkgconf,
+ install_dir : pkg_install_dir)
+endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]