diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2017-11-28 10:44:04 -0500 |
---|---|---|
committer | Xavier Claessens <xavier.claessens@collabora.com> | 2017-12-19 14:56:11 -0500 |
commit | 62c476842387a472cbff9f9b9f48ebb180543775 (patch) | |
tree | 8401a92b7def0b2552131535f29609541724a8de | |
parent | 8e91aaed79017270e8068b5f9027b8d1d8988fe0 (diff) | |
download | glib-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.meson | 3 | ||||
-rw-r--r-- | docs/reference/gio/meson.build | 4 | ||||
-rw-r--r-- | docs/reference/glib/meson.build | 4 | ||||
-rw-r--r-- | docs/reference/gobject/meson.build | 4 | ||||
-rw-r--r-- | gio/meson.build | 5 | ||||
-rw-r--r-- | glib/libcharset/meson.build | 2 | ||||
-rw-r--r-- | meson.build | 124 | ||||
-rw-r--r-- | meson_options.txt | 77 |
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') |