Hi On Thu, Dec 17, 2020 at 1:40 PM Paolo Bonzini wrote: > Signed-off-by: Paolo Bonzini > --- > configure | 102 ++-------------------------------------------- > meson.build | 46 +++++++++++++++++++-- > meson_options.txt | 2 + > 3 files changed, 48 insertions(+), 102 deletions(-) > > diff --git a/configure b/configure > index 71196b1fe7..5529ac4b32 100755 > --- a/configure > +++ b/configure > @@ -415,13 +415,7 @@ crypto_afalg="no" > cfi="false" > cfi_debug="false" > seccomp="$default_feature" > -glusterfs="$default_feature" > -glusterfs_xlator_opt="no" > -glusterfs_discard="no" > -glusterfs_fallocate="no" > -glusterfs_zerofill="no" > -glusterfs_ftruncate_has_stat="no" > -glusterfs_iocb_has_stat="no" > +glusterfs="auto" > gtk="$default_feature" > gtk_gl="no" > tls_priority="NORMAL" > @@ -1366,7 +1360,7 @@ for opt do > ;; > --disable-seccomp) seccomp="no" > ;; > - --disable-glusterfs) glusterfs="no" > + --disable-glusterfs) glusterfs="disabled" > ;; > --disable-avx2) avx2_opt="no" > ;; > @@ -1377,7 +1371,7 @@ for opt do > --enable-avx512f) avx512f_opt="yes" > ;; > > - --enable-glusterfs) glusterfs="yes" > + --enable-glusterfs) glusterfs="enabled" > ;; > --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) > echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 > @@ -3871,64 +3865,6 @@ if test "$libxml2" != "no" ; then > fi > fi > > -########################################## > -# glusterfs probe > -if test "$glusterfs" != "no" ; then > - if $pkg_config --atleast-version=3 glusterfs-api; then > - glusterfs="yes" > - glusterfs_cflags=$($pkg_config --cflags glusterfs-api) > - glusterfs_libs=$($pkg_config --libs glusterfs-api) > - if $pkg_config --atleast-version=4 glusterfs-api; then > - glusterfs_xlator_opt="yes" > - fi > - if $pkg_config --atleast-version=5 glusterfs-api; then > - glusterfs_discard="yes" > - fi > - if $pkg_config --atleast-version=6 glusterfs-api; then > - glusterfs_fallocate="yes" > - glusterfs_zerofill="yes" > - fi > - cat > $TMPC << EOF > -#include > - > -int > -main(void) > -{ > - /* new glfs_ftruncate() passes two additional args */ > - return glfs_ftruncate(NULL, 0, NULL, NULL); > -} > -EOF > - if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > - glusterfs_ftruncate_has_stat="yes" > - fi > - cat > $TMPC << EOF > -#include > - > -/* new glfs_io_cbk() passes two additional glfs_stat structs */ > -static void > -glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, > struct glfs_stat *poststat, void *data) > -{} > - > -int > -main(void) > -{ > - glfs_io_cbk iocb = &glusterfs_iocb; > - iocb(NULL, 0 , NULL, NULL, NULL); > - return 0; > -} > -EOF > - if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > - glusterfs_iocb_has_stat="yes" > - fi > - else > - if test "$glusterfs" = "yes" ; then > - feature_not_found "GlusterFS backend support" \ > - "Install glusterfs-api devel >= 3" > - fi > - glusterfs="no" > - fi > -fi > - > # Check for inotify functions when we are building linux-user > # emulator. This is done because older glibc versions don't > # have syscall stubs for these implemented. In that case we > @@ -6415,36 +6351,6 @@ if test "$getauxval" = "yes" ; then > echo "CONFIG_GETAUXVAL=y" >> $config_host_mak > fi > > -if test "$glusterfs" = "yes" ; then > - echo "CONFIG_GLUSTERFS=y" >> $config_host_mak > - echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak > - echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak > -fi > - > -if test "$glusterfs_xlator_opt" = "yes" ; then > - echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_discard" = "yes" ; then > - echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_fallocate" = "yes" ; then > - echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_zerofill" = "yes" ; then > - echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_ftruncate_has_stat" = "yes" ; then > - echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_iocb_has_stat" = "yes" ; then > - echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak > -fi > - > if test "$libssh" = "yes" ; then > echo "CONFIG_LIBSSH=y" >> $config_host_mak > echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak > @@ -6919,7 +6825,7 @@ NINJA=$ninja $meson setup \ > -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg > -Dvnc_png=$vnc_png \ > -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f > -Dvirtiofsd=$virtiofsd \ > -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \ > - -Dcurl=$curl \ > + -Dcurl=$curl -Dglusterfs=$glusterfs \ > -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ > -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ > -Dvhost_user_blk_server=$vhost_user_blk_server \ > diff --git a/meson.build b/meson.build > index 83dbc61acd..409b958a7f 100644 > --- a/meson.build > +++ b/meson.build > @@ -613,9 +613,40 @@ if 'CONFIG_RBD' in config_host > rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) > endif > glusterfs = not_found > -if 'CONFIG_GLUSTERFS' in config_host > - glusterfs = declare_dependency(compile_args: > config_host['GLUSTERFS_CFLAGS'].split(), > - link_args: > config_host['GLUSTERFS_LIBS'].split()) > +glusterfs_ftruncate_has_stat = false > +glusterfs_iocb_has_stat = false > +if not get_option('glusterfs').auto() or have_block > + glusterfs = dependency('glusterfs-api', version: '>=3', > + required: get_option('glusterfs'), > + method: 'pkg-config', static: enable_static) > + if glusterfs.found() > + glusterfs_ftruncate_has_stat = cc.links(''' > + #include > + > + int > + main(void) > + { > + /* new glfs_ftruncate() passes two additional args */ > + return glfs_ftruncate(NULL, 0, NULL, NULL); > + } > + ''', dependencies: glusterfs) > + glusterfs_iocb_has_stat = cc.links(''' > + #include > + > + /* new glfs_io_cbk() passes two additional glfs_stat structs */ > + static void > + glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat > *prestat, struct glfs_stat *poststat, void *data) > + {} > + > + int > + main(void) > + { > + glfs_io_cbk iocb = &glusterfs_iocb; > + iocb(NULL, 0 , NULL, NULL, NULL); > + return 0; > + } > + ''', dependencies: glusterfs) > + endif > endif > libssh = not_found > if 'CONFIG_LIBSSH' in config_host > @@ -876,6 +907,13 @@ config_host_data.set('CONFIG_MPATH', > mpathpersist.found()) > config_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) > config_host_data.set('CONFIG_CURL', curl.found()) > config_host_data.set('CONFIG_CURSES', curses.found()) > +config_host_data.set('CONFIG_GLUSTERFS', glusterfs.found()) > +config_host_data.set('CONFIG_GLUSTERFS_XLATOR_OPT', > glusterfs.version().version_compare('>=4')) > +config_host_data.set('CONFIG_GLUSTERFS_DISCARD', > glusterfs.version().version_compare('>=5')) > +config_host_data.set('CONFIG_GLUSTERFS_FALLOCATE', > glusterfs.version().version_compare('>=6')) > +config_host_data.set('CONFIG_GLUSTERFS_ZEROFILL', > glusterfs.version().version_compare('>=6')) > +config_host_data.set('CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT', > glusterfs_ftruncate_has_stat) > +config_host_data.set('CONFIG_GLUSTERFS_IOCB_HAS_STAT', > glusterfs_iocb_has_stat) > Since the header doesn't seem to export the version, we could have a CONFIG_GLUSTERFS_VERSION with the major version instead.. for a future cleanup eventually lgtm Reviewed-by: Marc-André Lureau config_host_data.set('CONFIG_SDL', sdl.found()) > config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) > config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', > have_vhost_user_blk_server) > @@ -2252,7 +2290,7 @@ summary_info += {'coroutine pool': > config_host['CONFIG_COROUTINE_POOL'] == '1 > summary_info += {'debug stack usage': > config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} > summary_info += {'mutex debugging': > config_host.has_key('CONFIG_DEBUG_MUTEX')} > summary_info += {'crypto afalg': > config_host.has_key('CONFIG_AF_ALG')} > -summary_info += {'GlusterFS support': > config_host.has_key('CONFIG_GLUSTERFS')} > +summary_info += {'GlusterFS support': glusterfs.found()} > summary_info += {'gcov': get_option('b_coverage')} > summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} > summary_info += {'libssh support': > config_host.has_key('CONFIG_LIBSSH')} > diff --git a/meson_options.txt b/meson_options.txt > index 2b845ac62b..b5d84bb88b 100644 > --- a/meson_options.txt > +++ b/meson_options.txt > @@ -46,6 +46,8 @@ option('cocoa', type : 'feature', value : 'auto', > description: 'Cocoa user interface (macOS only)') > option('curl', type : 'feature', value : 'auto', > description: 'CURL block device driver') > +option('glusterfs', type : 'feature', value : 'auto', > + description: 'Glusterfs block device driver') > option('mpath', type : 'feature', value : 'auto', > description: 'Multipath persistent reservation passthrough') > option('iconv', type : 'feature', value : 'auto', > -- > 2.29.2 > > >