[gtk+/wip/meson: 80/135] meson: generate .pc files



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]