summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2017-11-28 10:44:04 -0500
committerXavier Claessens <xavier.claessens@collabora.com>2017-12-19 14:56:11 -0500
commit62c476842387a472cbff9f9b9f48ebb180543775 (patch)
tree8401a92b7def0b2552131535f29609541724a8de
parent8e91aaed79017270e8068b5f9027b8d1d8988fe0 (diff)
downloadglib-62c476842387a472cbff9f9b9f48ebb180543775.tar.gz
Meson: Add missing options and conform to naming guidelines
https://bugzilla.gnome.org/show_bug.cgi?id=790837
-rw-r--r--config.h.meson3
-rw-r--r--docs/reference/gio/meson.build4
-rw-r--r--docs/reference/glib/meson.build4
-rw-r--r--docs/reference/gobject/meson.build4
-rw-r--r--gio/meson.build5
-rw-r--r--glib/libcharset/meson.build2
-rw-r--r--meson.build124
-rw-r--r--meson_options.txt77
8 files changed, 162 insertions, 61 deletions
diff --git a/config.h.meson b/config.h.meson
index 3f310b3c9..2350fd320 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -352,9 +352,6 @@
/* Define to 1 if libselinux is available */
#mesondefine HAVE_SELINUX
-/* Define to 1 if you have the <selinux/selinux.h> header file. */
-#mesondefine HAVE_SELINUX_SELINUX_H
-
/* Define to 1 if you have the `sendmmsg' function. */
#mesondefine HAVE_SENDMMSG
diff --git a/docs/reference/gio/meson.build b/docs/reference/gio/meson.build
index 8e3a24d2d..33d1557ac 100644
--- a/docs/reference/gio/meson.build
+++ b/docs/reference/gio/meson.build
@@ -1,4 +1,4 @@
-if get_option('with-docs') != 'no'
+if get_option('gtk_doc')
subdir('xml')
ignore_headers = [
@@ -205,7 +205,7 @@ if get_option('with-docs') != 'no'
endif
-if get_option('with-man') != 'no' and xsltproc.found()
+if get_option('man')
manpages = ['gapplication', 'gio-querymodules', 'glib-compile-schemas',
'glib-compile-resources', 'gsettings', 'gresource', 'gdbus',
'gio', 'gdbus-codegen']
diff --git a/docs/reference/glib/meson.build b/docs/reference/glib/meson.build
index 271574dda..f0f915e96 100644
--- a/docs/reference/glib/meson.build
+++ b/docs/reference/glib/meson.build
@@ -1,4 +1,4 @@
-if get_option('with-docs') != 'no'
+if get_option('gtk_doc')
subdir('xml')
ignore_headers = [
@@ -145,7 +145,7 @@ if get_option('with-docs') != 'no'
install: true)
endif
-if get_option('with-man') != 'no' and xsltproc.found()
+if get_option('man')
manpages = ['glib-gettextize', 'gtester', 'gtester-report']
foreach page : manpages
custom_target(page + '-man',
diff --git a/docs/reference/gobject/meson.build b/docs/reference/gobject/meson.build
index ea998fa8a..de46cf96d 100644
--- a/docs/reference/gobject/meson.build
+++ b/docs/reference/gobject/meson.build
@@ -1,4 +1,4 @@
-if get_option('with-docs') != 'no'
+if get_option('gtk_doc')
subdir('xml')
ignore_headers = [
@@ -109,7 +109,7 @@ if get_option('with-docs') != 'no'
)
endif
-if get_option('with-man') != 'no' and xsltproc.found()
+if get_option('man')
manpages = ['glib-mkenums', 'glib-genmarshal', 'gobject-query']
foreach page : manpages
custom_target(page + '-man',
diff --git a/gio/meson.build b/gio/meson.build
index b6ef13883..d7dcfa564 100644
--- a/gio/meson.build
+++ b/gio/meson.build
@@ -733,10 +733,9 @@ libgio = shared_library('gio-2.0',
link_with : internal_deps,
#libgio_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS)',
# '$(gio_win32_res_ldflag)',
- #$(SELINUX_LIBS)
- #$(XATTR_LIBS)
dependencies : [libintl, libz_dep, libdl_dep, libmount_dep, libglib_dep,
- libgobject_dep, libgmodule_dep] + platform_deps + network_libs,
+ libgobject_dep, libgmodule_dep, selinux_dep, xattr_dep,
+ platform_deps, network_libs],
c_args : gio_c_args,
# intl.lib is not compatible with SAFESEH
link_args : noseh_link_args,
diff --git a/glib/libcharset/meson.build b/glib/libcharset/meson.build
index 9e16c35a6..be4a79023 100644
--- a/glib/libcharset/meson.build
+++ b/glib/libcharset/meson.build
@@ -1,4 +1,4 @@
-charsetalias_dir = get_option('charsetalias-dir')
+charsetalias_dir = get_option('charsetalias_dir')
if charsetalias_dir == ''
charsetalias_dir = get_option('libdir')
endif
diff --git a/meson.build b/meson.build
index 2839f0340..2426ddd10 100644
--- a/meson.build
+++ b/meson.build
@@ -54,7 +54,10 @@ glib_libdir = join_paths(glib_prefix, get_option('libdir'))
glib_datadir = join_paths(glib_prefix, get_option('datadir'))
glib_pkgdatadir = join_paths(glib_datadir, 'glib-2.0')
glib_includedir = join_paths(glib_prefix, get_option('includedir'))
-glib_giomodulesdir = join_paths(glib_libdir, 'gio', 'modules')
+glib_giomodulesdir = get_option('gio_module_dir')
+if glib_giomodulesdir == ''
+ glib_giomodulesdir = join_paths(glib_libdir, 'gio', 'modules')
+endif
glib_pkgconfigreldir = join_paths(glib_libdir, 'pkgconfig')
@@ -1376,10 +1379,6 @@ endif
# Tests for iconv
#
-# First, we check if the C library provides iconv, then GNU libiconv, then
-# a native implementation
-# FIXME: add option as well
-#
# USE_LIBICONV_GNU: Using GNU libiconv
# USE_LIBICONV_NATIVE: Using a native impl of iconv in a separate library
#
@@ -1390,22 +1389,35 @@ endif
if host_system == 'windows'
libiconv = []
glib_conf.set('USE_LIBICONV_NATIVE', true)
-# Check C library; never check MinGW C library
-elif cc.has_function('iconv_open')
- libiconv = []
-# Check for libiconv
-elif cc.has_header_symbol('iconv.h', 'libiconv_open')
- glib_conf.set('USE_LIBICONV_GNU', true)
- libiconv = [cc.find_library('iconv')]
-# Check for a custom iconv implementation
-elif cc.has_header_symbol('iconv.h', 'iconv_open')
- glib_conf.set('USE_LIBICONV_NATIVE', true)
- libiconv = [cc.find_library('iconv')]
else
- error('No iconv() implementation found in C library or libiconv')
+ found_iconv = false
+ iconv_opt = get_option('iconv')
+ if iconv_opt == 'libc'
+ if cc.has_function('iconv_open')
+ libiconv = []
+ found_iconv = true
+ endif
+ elif iconv_opt == 'gnu'
+ if cc.has_header_symbol('iconv.h', 'libiconv_open')
+ glib_conf.set('USE_LIBICONV_GNU', true)
+ libiconv = [cc.find_library('iconv')]
+ found_iconv = true
+ endif
+ elif iconv_opt == 'native'
+ if cc.has_header_symbol('iconv.h', 'iconv_open')
+ glib_conf.set('USE_LIBICONV_NATIVE', true)
+ libiconv = [cc.find_library('iconv')]
+ found_iconv = true
+ endif
+ endif
+
+ if not found_iconv
+ error('No iconv() implementation found in C library or libiconv')
+ endif
+
endif
-if get_option('with-pcre') == 'internal'
+if get_option('internal_pcre')
pcre = []
use_system_pcre = false
else
@@ -1492,15 +1504,12 @@ xgettext = find_program('xgettext', required : false)
# libmount is only used by gio, but we need to fetch the libs to generate the
# pkg-config file below
libmount_dep = []
-libmount_opt = get_option('enable-libmount')
-if host_system == 'linux' and libmount_opt != 'no'
+if get_option('libmount')
libmount_dep = [dependency('mount', version : '>=2.28', required : false)]
if not libmount_dep[0].found()
- libmount_dep = [cc.find_library('mount', required : false)]
- libmount_h = cc.has_header('libmount/libmount.h')
- libmount_needed = libmount_opt == 'yes' and host_system == 'linux'
- if libmount_needed and (not libmount_dep[0].found() or not libmount_h)
- error('Need libmount but couldn\'t find it')
+ libmount_dep = [cc.find_library('mount', required : true)]
+ if not cc.has_header('libmount/libmount.h')
+ error('libmount support needs libmount/libmount.h header')
endif
endif
endif
@@ -1509,6 +1518,52 @@ if host_system == 'windows'
winsock2 = cc.find_library('ws2_32')
endif
+selinux_dep = []
+if get_option('selinux')
+ selinux_dep = [dependency('libselinux')]
+ glib_conf.set('SELINUX_LIBS', '-lselinux')
+ glib_conf.set('HAVE_SELINUX', 1)
+endif
+
+xattr_dep = []
+if get_option('xattr')
+ # either glibc or libattr can provide xattr support
+ # for both of them, we check for getxattr being in
+ # the library and a valid xattr header.
+
+ # try glibc
+ if cc.has_function('getxattr') and cc.has_header('sys/xattr.h')
+ glib_conf.set('HAVE_SYS_XATTR_H', 1)
+ glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format('HAVE_SYS_XATTR_H')
+ #failure. try libattr
+ elif cc.has_header_symbol('attr/xattr.h', 'getxattr')
+ glib_conf.set('HAVE_ATTR_XATTR_H', 1)
+ glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format('HAVE_ATTR_XATTR_H')
+ xattr_dep = [cc.find_library('xattr')]
+ else
+ error('No getxattr implementation found in C library or libxattr')
+ endif
+
+ glib_conf.set('HAVE_XATTR', 1)
+ if cc.compiles(glib_conf_prefix + '''
+ #include <stdio.h>
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_XATTR_H
+ #include <sys/xattr.h>
+ #elif HAVE_ATTR_XATTR_H
+ #include <attr/xattr.h>
+ #endif
+
+ int main (void) {
+ ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);
+ }''',
+ name : 'XATTR_NOFOLLOW')
+ glib_conf.set('HAVE_XATTR_NOFOLLOW', 1)
+ endif
+endif
+
python = import('python3').find_python()
# Determine which user environment-dependent files that we want to install
@@ -1537,17 +1592,17 @@ endif
if use_system_pcre
glib_conf.set('PCRE_LIBS', '-lpcre')
endif
-if libmount_dep.length() == 1 and libmount_dep[0].found()
+if libmount_dep.length() != 0
glib_conf.set('LIBMOUNT_LIBS', '-lmount')
glib_conf.set('HAVE_LIBMOUNT', 1)
endif
-glib_conf.set('GIO_MODULE_DIR', '${libdir}/gio/modules')
+glib_conf.set('GIO_MODULE_DIR', glib_giomodulesdir)
# FIXME: Missing:
-# @G_MODULE_LIBS@ @SELINUX_LIBS@ @COCOA_LIBS@ @CARBON_LIBS@ @G_LIBS_EXTRA@
+# @G_MODULE_LIBS@ @COCOA_LIBS@ @CARBON_LIBS@ @G_LIBS_EXTRA@
# @PCRE_REQUIRES@ @GLIB_EXTRA_CFLAGS@ @G_THREAD_CFLAGS@
# Tracing: dtrace
-want_dtrace = get_option('enable-dtrace')
+want_dtrace = get_option('dtrace')
enable_dtrace = false
# Since dtrace support is opt-in we just error out if it was requested but
@@ -1574,11 +1629,11 @@ if want_dtrace
endif
# systemtap
-want_systemtap = get_option('enable-systemtap')
+want_systemtap = get_option('systemtap')
enable_systemtap = false
if want_systemtap and enable_dtrace
- tapset_install_dir = get_option('tapset-install-dir')
+ tapset_install_dir = get_option('tapset_install_dir')
if tapset_install_dir == ''
tapset_install_dir = join_paths(get_option('datadir'), 'systemtap/tapset', host_machine.cpu_family())
endif
@@ -1656,11 +1711,8 @@ if host_system == 'windows'
install_headers([ 'msvc_recommended_pragmas.h' ], subdir : 'glib-2.0')
endif
-if get_option('with-man') != 'no'
- xsltproc = find_program('xsltproc', required : false)
- if not xsltproc.found() and get_option('with-man') == 'yes'
- error('man pages enabled and xsltproc not found')
- endif
+if get_option('man')
+ xsltproc = find_program('xsltproc', required : true)
xsltproc_command = [
xsltproc,
'--nonet',
diff --git a/meson_options.txt b/meson_options.txt
index 9284fff06..4504c6858 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,12 +1,65 @@
-option('with-docs', type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
-option('with-man', type : 'combo', choices : ['auto', 'yes', 'no'], value : 'auto')
-option('with-pcre', type : 'combo', choices : ['system', 'internal'], value : 'system')
-option('enable-libmount', type : 'combo', choices : ['auto', 'yes', 'no'], value : 'yes')
-option('enable-dtrace', type : 'boolean', value : false,
- description : 'include tracing support for dtrace')
-option('enable-systemtap', type : 'boolean', value : false,
- description : 'include tracing support for systemtap')
-option('tapset-install-dir', type : 'string', value : '',
- description : 'path where systemtap tapsets are installed')
-option('charsetalias-dir', type : 'string', value : '',
- description : 'directory for charset.alias file (libdir by default)')
+option('runtime_libdir',
+ type : 'string',
+ value : '',
+ description : 'install runtime libraries relative to libdir')
+
+option('iconv',
+ type : 'combo',
+ choices : ['libc', 'gnu', 'native'],
+ value : 'libc',
+ description : 'iconv implementation to use (\'libc\' = \'Part of the C stdlib\'; \'gnu\' = \'GNU\'s iconv\'; \'native\' = \'A separate iconv\')')
+
+option('charsetalias_dir',
+ type : 'string',
+ value : '',
+ description : 'directory for charset.alias dir (default to \'libdir\' if unset)')
+
+option('gio_module_dir',
+ type : 'string',
+ value : '',
+ description : 'load gio modules from this directory (default to \'libdir/gio/modules\' if unset)')
+
+option('selinux',
+ type : 'boolean',
+ value : true,
+ description : 'build with selinux support')
+
+option('xattr',
+ type : 'boolean',
+ value : true,
+ description : 'build with xattr support')
+
+option('libmount',
+ type : 'boolean',
+ value : true,
+ description : 'build with libmount support')
+
+option('internal_pcre',
+ type : 'boolean',
+ value : false,
+ description : 'whether to use internal PCRE')
+
+option('man',
+ type : 'boolean',
+ value : false,
+ description : 'generate man pages (requires xsltproc)')
+
+option('dtrace',
+ type : 'boolean',
+ value : false,
+ description : 'include tracing support for dtrace')
+
+option('systemtap',
+ type : 'boolean',
+ value : false,
+ description : 'include tracing support for systemtap')
+
+option('tapset_install_dir',
+ type : 'string',
+ value : '',
+ description : 'path where systemtap tapsets are installed')
+
+option('gtk_doc',
+ type : 'boolean',
+ value : false,
+ description : 'use gtk-doc to build documentation')