meson: Conditionally check for dependencies

This commit is contained in:
Timm Bäder 2016-09-24 17:35:10 +02:00 committed by Emmanuele Bassi
parent 02a250147f
commit 6dd6660c68
3 changed files with 98 additions and 72 deletions

View File

@ -194,6 +194,12 @@
/* 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

View File

@ -73,7 +73,7 @@ demos = files([
gtkdemo_deps = [libgtk_dep]
if build_font_demo
if harfbuzz_dep.found() and pangoft_dep.found()
demos += files('font_features.c')
gtkdemo_deps += harfbuzz_dep
endif

View File

@ -13,10 +13,10 @@ 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')
gtk_version = meson.project_version().split('.')
gtk_major_version = gtk_version[0]
gtk_minor_version = gtk_version[1]
gtk_micro_version = gtk_version[2]
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()
gtk_interface_age = 0
add_global_arguments('-DGTK_VERSION="' + meson.project_version() + '"', language: 'c')
@ -27,7 +27,7 @@ add_global_arguments('-DGTK_VERSION="' + meson.project_version() + '"', language
# for GTK+.
gtk_binary_version = '3.0.0'
gtk_binary_age = 100 * gtk_minor_version.to_int() + gtk_micro_version.to_int()
gtk_binary_age = 100 * gtk_minor_version + gtk_micro_version
gtk_api_version = '@0@.0'.format(gtk_major_version)
x11_enabled = get_option('enable-x11-backend')
@ -35,10 +35,10 @@ wayland_enabled = get_option('enable-wayland-backend')
broadway_enabled = get_option('enable-broadway-backend')
mkmarshal = find_program('build_marshal.py')
mkmarshal = find_program('build_marshal.py')
glib_marshal = find_program('glib-genmarshal')
mkenum = find_program('build_enum.py')
perl = find_program('perl')
mkenum = find_program('build_enum.py')
perl = find_program('perl')
glib_mkenums = find_program('glib-mkenums')
os_unix = false
@ -56,10 +56,6 @@ endif
os_unix = not os_win32
build_font_demo = false
cc = meson.get_compiler('c')
cdata = configuration_data()
@ -67,6 +63,7 @@ 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('GTK_MAJOR_VERSION', gtk_major_version)
cdata.set('GTK_MINOR_VERSION', gtk_minor_version)
cdata.set('GTK_MICRO_VERSION', gtk_micro_version)
@ -102,7 +99,6 @@ endforeach
check_functions = [
# check token HAVE_BIND_TEXTDOMAIN_CODESET
# check token HAVE_COLORD
# check token HAVE_CUPS_API_1_6
['HAVE_DCGETTEXT', 'dcgettext', '#include<libintl.h>'],
['HAVE_DECL_ISINF', 'isinf', '#include<math.h>'],
@ -116,23 +112,21 @@ check_functions = [
# check token HAVE_HTTP_AUTHSTRING
# check token HAVE_IPRINTDIALOGCALLBACK
# check token HAVE_LC_MESSAGES
# check token HAVE_LIBM
# check token HAVE_LOCALTIME_R
['HAVE_LSTAT', 'lstat', '#include<sys/stat.h>'],
# check token HAVE_MALLINFO
# check token HAVE_MKSTEMP
['HAVE_MMAP', 'mmap', '#include<sys/mman.h>'],
['HAVE_NEARBYINT', 'nearbyint', '#include<math.h>'],
# check token HAVE_PAPI
# check token HAVE_POSIX_FALLOCATE
['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_XGENERICEVENTS', 'XGetEventData', '#include<X11/Xlib.h>'],
['HAVE_XKB', 'XkbQueryExtension', '#include<X11/XKBlib.h>'],
['HAVE_XSYNC', 'XSyncQueryExtension', '#include<X11/Xlib.h>\n#include</usr/include/X11/extensions/sync.h>'],
# check token HAVE_SOCKADDR_UN_SUN_LEN
# check token HAVE_SOLARIS_XINERAMA
# check token HAVE_XFREE_XINERAMA
@ -143,6 +137,12 @@ check_functions = [
# check token HAVE__NL_TIME_FIRST_WEEKDAY
# check token HAVE__NSGETENVIRON
]
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))
@ -150,20 +150,21 @@ foreach f : check_functions
endif
endforeach
cdata.set('GETTEXT_PACKAGE', '"gtk-3.0"')
#
# 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
cdata.set('GLIB_DISABLE_DEPRECATION_WARNINGS', 1)
endif
confinc = include_directories('.')
gdkinc = include_directories('gdk')
gtkinc = include_directories('gtk')
x11_dep = dependency('x11')
xrender_dep = dependency('xrender')
xi_dep = dependency('xi')
xext_dep = dependency('xext')
xcursor_dep = dependency('xcursor', required: false)
xdamage_dep = dependency('xdamage', required: false)
xfixes_dep = dependency('xfixes', required: false)
xcomposite_dep = dependency('xcomposite', required: false)
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')
@ -176,62 +177,81 @@ 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')
xkbdep = dependency('xkbcommon', version: '>= 0.2.0')
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')
xrandr_dep = dependency('xrandr', version: '>= 1.2.99')
xrandr15_dep = dependency('xrandr', version: '>= 1.5', required: false)
harfbuzz_dep = dependency('harfbuzz', version: '>= 0.9', required: false)
mlib = cc.find_library('m', required: false)
shmlib = cc.find_library('rt')
xkbdep = dependency('xkbcommon', version: '>= 0.2.0')
build_font_demo = harfbuzz_dep.found() and pangoft_dep.found()
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')
endif
if x11_enabled
xrandr_dep = dependency('xrandr', version: '>= 1.2.99')
xrandr15_dep = dependency('xrandr', version: '>= 1.5', required: false)
x11_dep = dependency('x11')
xrender_dep = dependency('xrender')
xi_dep = dependency('xi')
xext_dep = dependency('xext')
xcursor_dep = dependency('xcursor', required: false)
xdamage_dep = dependency('xdamage', required: false)
xfixes_dep = dependency('xfixes', required: false)
xcomposite_dep = dependency('xcomposite', required: false)
if xdamage_dep.found()
cdata.set('HAVE_XDAMAGE', 1)
endif
if xcursor_dep.found()
cdata.set('HAVE_XCURSOR', 1)
endif
if xcomposite_dep.found()
cdata.set('HAVE_XCOMPOSITE', 1)
endif
if xfixes_dep.found()
cdata.set('HAVE_XFIXES', 1)
endif
if xi_dep.found() and cc.has_header('X11/extensions/XInput2.h')
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)
cdata.set('XINPUT_2_2', 1)
endif
endif
if xrandr_dep.found()
cdata.set('HAVE_RANDR', 1)
if xrandr15_dep.found()
cdata.set('HAVE_RANDR15', 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)
endif
if xdamage_dep.found()
cdata.set('HAVE_XDAMAGE', 1)
endif
if xcursor_dep.found()
cdata.set('HAVE_XCURSOR', 1)
if colord_dep.found()
cdata.set('HAVE_COLORD', 1)
endif
if mlib.found()
cdata.set('HAVE_LIBM', 1)
endif
if xcomposite_dep.found()
cdata.set('HAVE_XCOMPOSITE', 1)
endif
if xfixes_dep.found()
cdata.set('HAVE_XFIXES', 1)
endif
if xi_dep.found() and cc.has_header('X11/extensions/XInput2.h')
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)
cdata.set('XINPUT_2_2', 1)
endif
endif
if xrandr_dep.found()
cdata.set('HAVE_RANDR', 1)
if xrandr15_dep.found()
cdata.set('HAVE_RANDR15', 1)
endif
endif
configure_file(
input : 'config.h.meson',
output: 'config.h',