From 510665daefe08714799d55360810cbe1f4d27ac4 Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Thu, 30 Apr 2020 11:30:32 +0200 Subject: [PATCH] meson: add LXC driver build option Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa Reviewed-by: Neal Gompa --- configure.ac | 8 ----- m4/virt-driver-lxc.m4 | 74 ------------------------------------------- meson.build | 34 ++++++++++++++++++++ meson_options.txt | 1 + 4 files changed, 35 insertions(+), 82 deletions(-) delete mode 100644 m4/virt-driver-lxc.m4 diff --git a/configure.ac b/configure.ac index 1f41e8f45d..d6d8bdab63 100644 --- a/configure.ac +++ b/configure.ac @@ -74,10 +74,6 @@ case $host in esac if test $with_linux = no; then - if test "x$with_lxc" != xyes - then - with_lxc=no - fi with_dtrace=no with_storage_scsi=no fi @@ -90,7 +86,6 @@ AM_CONDITIONAL([WITH_MACOS], [test "$with_macos" = "yes"]) # Stateful drivers are useful only when building the daemon. if test "$with_libvirtd" = "no" ; then with_qemu=no - with_lxc=no with_vbox=no fi @@ -112,7 +107,6 @@ LIBVIRT_DRIVER_ARG_QEMU LIBVIRT_DRIVER_ARG_OPENVZ LIBVIRT_DRIVER_ARG_VMWARE LIBVIRT_DRIVER_ARG_VBOX -LIBVIRT_DRIVER_ARG_LXC LIBVIRT_DRIVER_ARG_VZ LIBVIRT_DRIVER_ARG_TEST LIBVIRT_DRIVER_ARG_NETWORK @@ -122,7 +116,6 @@ LIBVIRT_DRIVER_CHECK_QEMU LIBVIRT_DRIVER_CHECK_OPENVZ LIBVIRT_DRIVER_CHECK_VMWARE LIBVIRT_DRIVER_CHECK_VBOX -LIBVIRT_DRIVER_CHECK_LXC LIBVIRT_DRIVER_CHECK_VZ LIBVIRT_DRIVER_CHECK_TEST LIBVIRT_DRIVER_CHECK_NETWORK @@ -322,7 +315,6 @@ LIBVIRT_DRIVER_RESULT_QEMU LIBVIRT_DRIVER_RESULT_OPENVZ LIBVIRT_DRIVER_RESULT_VMWARE LIBVIRT_DRIVER_RESULT_VBOX -LIBVIRT_DRIVER_RESULT_LXC LIBVIRT_DRIVER_RESULT_VZ LIBVIRT_DRIVER_RESULT_TEST LIBVIRT_DRIVER_RESULT_NETWORK diff --git a/m4/virt-driver-lxc.m4 b/m4/virt-driver-lxc.m4 deleted file mode 100644 index d2951b596a..0000000000 --- a/m4/virt-driver-lxc.m4 +++ /dev/null @@ -1,74 +0,0 @@ -dnl The LXC driver -dnl -dnl Copyright (C) 2016 Red Hat, Inc. -dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License, or (at your option) any later version. -dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library. If not, see -dnl . -dnl - -AC_DEFUN([LIBVIRT_DRIVER_ARG_LXC], [ - LIBVIRT_ARG_WITH_FEATURE([LXC], [Linux Container], [check]) -]) - -AC_DEFUN([LIBVIRT_DRIVER_CHECK_LXC], [ - if test "$with_libvirtd" = "no" ; then - with_lxc=no - fi - - if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[ - #include - #include - #include - ]], [[ - unshare(!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC)); - ]]) - ], [ - with_lxc=yes - AC_DEFINE([HAVE_DECL_LO_FLAGS_AUTOCLEAR], [1], - [Define to 1 if you have the declaration of `LO_FLAGS_AUTOCLEAR', - and to 0 if you don't.]) - ], [ - if test "$with_lxc" = "check"; then - with_lxc=no - AC_MSG_NOTICE([Required kernel features were not found, disabling LXC]) - else - AC_MSG_ERROR([Required kernel features for LXC were not found]) - fi - ]) - - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[ - #include - #include - #include - ]], [[ - unshare(!(LOOP_CTL_GET_FREE)); - ]]) - ], [ - AC_DEFINE([HAVE_DECL_LOOP_CTL_GET_FREE], [1], - [Define to 1 if you have the declaration of `LOOP_CTL_GET_FREE', - and to 0 if you don't.]) - ]) - fi - if test "$with_lxc" = "yes" ; then - AC_DEFINE_UNQUOTED([WITH_LXC], 1, [whether LXC driver is enabled]) - fi - AM_CONDITIONAL([WITH_LXC], [test "$with_lxc" = "yes"]) -]) - -AC_DEFUN([LIBVIRT_DRIVER_RESULT_LXC], [ - LIBVIRT_RESULT([LXC], [$with_lxc]) -]) diff --git a/meson.build b/meson.build index 24639e8a88..54da8d4416 100644 --- a/meson.build +++ b/meson.build @@ -1668,6 +1668,39 @@ elif get_option('driver_libxl').enabled() error('libvirtd is required for libxenlight') endif +if not get_option('driver_lxc').disabled() and host_machine.system() == 'linux' and conf.has('WITH_LIBVIRTD') + lxc_support_code = ''' +#include +#include +#include + +void main(void) { + unshare(!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC)); +} + ''' + if cc.compiles(lxc_support_code, name: 'lxc support', args: '-D_GNU_SOURCE') + conf.set('WITH_LXC', 1) + conf.set('HAVE_DECL_LO_FLAGS_AUTOCLEAR', 1) + elif get_option('driver_lxc').enabled() + error('Required kernel features for LXC were not found') + endif + + lxc_get_free_code = ''' +#include +#include +#include + +void main(void) { + unshare(!(LOOP_CTL_GET_FREE)); +} + ''' + if cc.compiles(lxc_get_free_code) + conf.set('HAVE_DECL_LOOP_CTL_GET_FREE', 1) + endif +elif get_option('driver_lxc').enabled() + error('linux and remote_driver are required for LXC') +endif + # define top include directory @@ -1689,6 +1722,7 @@ configure_file(output: 'meson-config.h', configuration: conf) driver_summary = { 'libxl': conf.has('WITH_LIBXL'), + 'LXC': conf.has('WITH_LXC'), 'ESX': conf.has('WITH_ESX'), 'Hyper-V': conf.has('WITH_HYPERV'), 'Bhyve': conf.has('WITH_BHYVE'), diff --git a/meson_options.txt b/meson_options.txt index 0ca5589a6e..f28692ae2a 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -53,5 +53,6 @@ option('driver_esx', type: 'feature', value: 'enabled', description: 'esx driver option('driver_hyperv', type: 'feature', value: 'auto', description: 'Hyper-V driver') option('driver_libvirtd', type: 'feature', value: 'auto', description: 'libvirtd driver') option('driver_libxl', type: 'feature', value: 'auto', description: 'libxenlight driver') +option('driver_lxc', type: 'feature', value: 'auto', description: 'Linux Container driver') option('driver_remote', type: 'feature', value: 'enabled', description: 'remote driver') option('remote_default_mode', type: 'combo', choices: ['legacy', 'direct'], value: 'legacy', description: 'remote driver default mode')