Hi

On Thu, Dec 17, 2020 at 1:40 PM Paolo Bonzini <pbonz...@redhat.com> wrote:

> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---
>  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 <glusterfs/api/glfs.h>
> -
> -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 <glusterfs/api/glfs.h>
> -
> -/* 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 <glusterfs/api/glfs.h>
> +
> +      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 <glusterfs/api/glfs.h>
> +
> +      /* 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 <marcandre.lur...@redhat.com>

 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
>
>
>

Reply via email to