[libvirt] [RFC v2 00/16] Add vhost-user-gpu support
From: Marc-André Lureau <marcandre.lureau@redhat.com> Hi, This series of patches add support for running a virtio GPU in a seperate process, using vhost-user. The QEMU series "[PATCH v4 00/29] vhost-user for input & GPU" is still under review, and will hopefully land in 3.1. There are several benefits of running the GPU process in an external process, since Mesa is rather heavy on the qemu main loop, and may block for a while or crash. I observe x5 performance improvements with Unigine Heaven 4 benchmark. The external GPU process is started with one end of the vhost-user socket pair, the other end is given to a QEMU chardev. It is also added to the emulator cgroup to restrict its CPU usage. vhost-user requires shared VM memory. The first patches ease and improve shared memory setup, by using memfd. They could be considered seperatly, but that's the setup I'd recommend with vhost-user-gpu. Review welcome! RFCv2: - add new memfd memroyBacking source type - drop the implicit shared memory NUMA setup approach, explicit now required - rebased Marc-André Lureau (16): qemu: add memory-backend-memfd capability check qemu: add memfd memory backing qemu: add vhost-user-gpu capabilities checks domain: add "vhost-user" video type qemu: fill the vhost-user video type capability qemu: check that qemu is vhost-user-vga capable qemu: vhost-user is valid as non-primary video device qemu: validate vhost-user video model qemu: add qemuSecurityStartVhostUserGPU helper qemu: add vhost-user-gpu helper unit qemu: restrict 'virgl=' option to 'virtio' video type qemu: set default address type on vhost-user video model qemu: start/stop the vhost-user-gpu external device qemu: build vhost-user-backend for vhost-user-gpu qemu: build vhost-user-gpu video device arguments tests: add vhost-user-gpu xml2argv tests docs/formatdomain.html.in | 11 +- docs/schemas/domaincommon.rng | 2 + src/conf/device_conf.h | 1 + src/conf/domain_conf.c | 7 +- src/conf/domain_conf.h | 2 + src/qemu/Makefile.inc.am | 2 + src/qemu/qemu_capabilities.c | 8 + src/qemu/qemu_capabilities.h | 3 + src/qemu/qemu_command.c | 135 ++++++-- src/qemu/qemu_domain.c | 8 +- src/qemu/qemu_domain_address.c | 4 +- src/qemu/qemu_extdevice.c | 47 ++- src/qemu/qemu_process.c | 6 +- src/qemu/qemu_security.c | 48 +++ src/qemu/qemu_security.h | 6 + src/qemu/qemu_vhost_user_gpu.c | 318 ++++++++++++++++++ src/qemu/qemu_vhost_user_gpu.h | 48 +++ tests/domaincapsschemadata/full.xml | 1 + .../caps_2.12.0.aarch64.xml | 1 + .../caps_2.12.0.ppc64.xml | 1 + .../caps_2.12.0.s390x.xml | 1 + .../caps_2.12.0.x86_64.xml | 1 + .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 + .../caps_3.0.0.riscv32.xml | 1 + .../caps_3.0.0.riscv64.xml | 1 + .../caps_3.0.0.x86_64.xml | 1 + tests/qemuxml2argvdata/memfd-memory-numa.args | 27 ++ tests/qemuxml2argvdata/memfd-memory-numa.xml | 33 ++ .../vhost-user-gpu-secondary.args | 33 ++ .../vhost-user-gpu-secondary.xml | 44 +++ tests/qemuxml2argvdata/vhost-user-vga.args | 30 ++ tests/qemuxml2argvdata/vhost-user-vga.xml | 41 +++ tests/qemuxml2argvtest.c | 15 + 33 files changed, 849 insertions(+), 39 deletions(-) create mode 100644 src/qemu/qemu_vhost_user_gpu.c create mode 100644 src/qemu/qemu_vhost_user_gpu.h create mode 100644 tests/qemuxml2argvdata/memfd-memory-numa.args create mode 100644 tests/qemuxml2argvdata/memfd-memory-numa.xml create mode 100644 tests/qemuxml2argvdata/vhost-user-gpu-secondary.args create mode 100644 tests/qemuxml2argvdata/vhost-user-gpu-secondary.xml create mode 100644 tests/qemuxml2argvdata/vhost-user-vga.args create mode 100644 tests/qemuxml2argvdata/vhost-user-vga.xml -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 + 10 files changed, 11 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index a075677421..2c2f193aae 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -508,6 +508,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, /* 315 */ "vfio-pci.display", "blockdev", + "memory-backend-memfd", ); @@ -1148,6 +1149,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "vhost-vsock-device", QEMU_CAPS_DEVICE_VHOST_VSOCK }, { "mch", QEMU_CAPS_DEVICE_MCH }, { "sev-guest", QEMU_CAPS_SEV_GUEST }, + { "memory-backend-memfd", QEMU_CAPS_OBJECT_MEMORY_MEMFD }, }; static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 3d3a978759..24ce4545a4 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -492,6 +492,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 315 */ QEMU_CAPS_VFIO_PCI_DISPLAY, /* -device vfio-pci.display */ QEMU_CAPS_BLOCKDEV, /* -blockdev and blockdev-add are supported */ + QEMU_CAPS_OBJECT_MEMORY_MEMFD, /* -object memory-backend-memfd */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml index 3c1a704100..a1f5111fc4 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml @@ -169,6 +169,7 @@ <flag name='tpm-emulator'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='memory-backend-memfd'/> <version>2011090</version> <kvmVersion>0</kvmVersion> <microcodeVersion>347144</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml index 877362eaef..c246e5c94a 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml @@ -167,6 +167,7 @@ <flag name='machine.pseries.cap-htm'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='memory-backend-memfd'/> <version>2011090</version> <kvmVersion>0</kvmVersion> <microcodeVersion>427928</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml index b8e46a970a..2e6baf42a7 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml @@ -133,6 +133,7 @@ <flag name='tpm-emulator'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='memory-backend-memfd'/> <version>2012000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>375593</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml index edf944bc35..4b410997d1 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -211,6 +211,7 @@ <flag name='sev-guest'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='memory-backend-memfd'/> <version>2011090</version> <kvmVersion>0</kvmVersion> <microcodeVersion>415790</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml index 6892c9bd64..a9967d67a3 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml @@ -167,6 +167,7 @@ <flag name='machine.pseries.cap-htm'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='memory-backend-memfd'/> <version>2012050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>446365</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml index 39cc480dd2..183ad7cc6c 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml @@ -104,6 +104,7 @@ <flag name='chardev-fd-pass'/> <flag name='tpm-emulator'/> <flag name='egl-headless'/> + <flag name='memory-backend-memfd'/> <version>3000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>0</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml index 344740879e..f2f32e3025 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml @@ -104,6 +104,7 @@ <flag name='chardev-fd-pass'/> <flag name='tpm-emulator'/> <flag name='egl-headless'/> + <flag name='memory-backend-memfd'/> <version>3000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>0</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml index 747f51b799..e4665af165 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml @@ -213,6 +213,7 @@ <flag name='usb-storage.werror'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='memory-backend-memfd'/> <version>3000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>427391</microcodeVersion> -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Add a new memoryBacking source type "memfd", support by QEMU (when the capability is available). Sealing is enabled by default in qemu, and hugepage is easier to setup, which makes it often a better choice than memory-backend-file. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- docs/formatdomain.html.in | 8 ++- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 62 +++++++++++++------ tests/qemuxml2argvdata/memfd-memory-numa.args | 27 ++++++++ tests/qemuxml2argvdata/memfd-memory-numa.xml | 33 ++++++++++ tests/qemuxml2argvtest.c | 3 + 8 files changed, 116 insertions(+), 22 deletions(-) create mode 100644 tests/qemuxml2argvdata/memfd-memory-numa.args create mode 100644 tests/qemuxml2argvdata/memfd-memory-numa.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index eb619a1656..ca656c9f7e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1099,7 +1099,7 @@ </hugepages> <nosharepages/> <locked/> - <source type="file|anonymous"/> + <source type="file|anonymous|memfd"/> <access mode="shared|private"/> <allocation mode="immediate|ondemand"/> <discard/> @@ -1150,8 +1150,10 @@ suitable for the specific environment at the same time to mitigate the risks described above. <span class="since">Since 1.0.6</span></dd> <dt><code>source</code></dt> - <dd>In this attribute you can switch to file memorybacking or keep - default anonymous.</dd> + <dd>In this attribute you can switch to file memorybacking or + keep default anonymous. <span class="since">Since 4.8.0</span>, + you may choose <code>memfd</code> backing. (QEMU/KVM only) + </dd> <dt><code>access</code></dt> <dd>Specify if memory is shared or private. This can be overridden per numa node by <code>memAccess</code></dd> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 3796eb4b5e..04d7b69dd7 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -655,6 +655,7 @@ <choice> <value>file</value> <value>anonymous</value> + <value>memfd</value> </choice> </attribute> </element> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 38cac07913..b3a1158e75 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -908,7 +908,8 @@ VIR_ENUM_IMPL(virDomainDiskMirrorState, VIR_DOMAIN_DISK_MIRROR_STATE_LAST, VIR_ENUM_IMPL(virDomainMemorySource, VIR_DOMAIN_MEMORY_SOURCE_LAST, "none", "file", - "anonymous") + "anonymous", + "memfd") VIR_ENUM_IMPL(virDomainMemoryAllocation, VIR_DOMAIN_MEMORY_ALLOCATION_LAST, "none", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 8a3673361a..e72b824226 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -607,6 +607,7 @@ typedef enum { VIR_DOMAIN_MEMORY_SOURCE_NONE = 0, /* No memory source defined */ VIR_DOMAIN_MEMORY_SOURCE_FILE, /* Memory source is set as file */ VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS, /* Memory source is set as anonymous */ + VIR_DOMAIN_MEMORY_SOURCE_MEMFD, /* Memory source is set as memfd */ VIR_DOMAIN_MEMORY_SOURCE_LAST, } virDomainMemorySource; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 8aa20496bc..830695a147 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3100,6 +3100,24 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd, return ret; } +static int +qemuBuildMemoryBackendPropsShare(virJSONValuePtr props, + virDomainMemoryAccess memAccess) +{ + switch (memAccess) { + case VIR_DOMAIN_MEMORY_ACCESS_SHARED: + return virJSONValueObjectAdd(props, "b:share", true, NULL); + + case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE: + return virJSONValueObjectAdd(props, "b:share", false, NULL); + + case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT: + case VIR_DOMAIN_MEMORY_ACCESS_LAST: + break; + } + + return 0; +} /** * qemuBuildMemoryBackendProps: @@ -3246,7 +3264,18 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, if (!(props = virJSONValueNewObject())) return -1; - if (useHugepage || mem->nvdimmPath || memAccess || + if (def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_MEMFD) { + backendType = "memory-backend-memfd"; + + if (qemuBuildMemoryBackendPropsShare(props, memAccess) < 0) { + goto cleanup; + } + if (useHugepage && + (virJSONValueObjectAdd(props, "b:hugetlb", useHugepage, NULL) < 0 || + virJSONValueObjectAdd(props, "U:hugetlbsize", pagesize << 10, NULL) < 0)) { + goto cleanup; + } + } else if (useHugepage || mem->nvdimmPath || memAccess || def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_FILE) { if (mem->nvdimmPath) { @@ -3284,20 +3313,8 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, goto cleanup; } - switch (memAccess) { - case VIR_DOMAIN_MEMORY_ACCESS_SHARED: - if (virJSONValueObjectAdd(props, "b:share", true, NULL) < 0) - goto cleanup; - break; - - case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE: - if (virJSONValueObjectAdd(props, "b:share", false, NULL) < 0) - goto cleanup; - break; - - case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT: - case VIR_DOMAIN_MEMORY_ACCESS_LAST: - break; + if (qemuBuildMemoryBackendPropsShare(props, memAccess) < 0) { + goto cleanup; } } else { backendType = "memory-backend-ram"; @@ -3346,6 +3363,12 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, _("this qemu doesn't support the " "memory-backend-ram object")); goto cleanup; + } else if (STREQ(backendType, "memory-backend-memfd") && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("this qemu doesn't support the " + "memory-backend-memfd object")); + goto cleanup; } ret = 0; @@ -7650,7 +7673,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, if (virDomainNumatuneHasPerNodeBinding(def->numa) && !(virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) || - virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE))) { + virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE) || + virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Per-node memory binding is not supported " "with this QEMU")); @@ -7659,7 +7683,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, if (def->mem.nhugepages && def->mem.hugepages[0].size != system_page_size && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { + !(virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE) || + virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("huge pages per NUMA node are not " "supported with this QEMU")); @@ -7676,7 +7701,8 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, * need to check which approach to use */ for (i = 0; i < ncells; i++) { if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) || - virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE)) { + virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_FILE) || + virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_MEMFD)) { if ((rc = qemuBuildMemoryCellBackendStr(def, cfg, i, priv, &nodeBackends[i])) < 0) diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.args b/tests/qemuxml2argvdata/memfd-memory-numa.args new file mode 100644 index 0000000000..04b28a8085 --- /dev/null +++ b/tests/qemuxml2argvdata/memfd-memory-numa.args @@ -0,0 +1,27 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name instance-00000092 \ +-S \ +-machine pc-i440fx-wily,accel=kvm,usb=off,dump-guest-core=off \ +-m 14336 \ +-mem-prealloc \ +-smp 20,sockets=1,cores=8,threads=1 \ +-object memory-backend-memfd,id=ram-node0,share=yes,hugetlb=yes,hugetlbsize=2097152,size=15032385536 \ +-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \ +-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,\ +path=/tmp/lib/domain--1-instance-00000092/monitor.sock,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-usb \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.xml b/tests/qemuxml2argvdata/memfd-memory-numa.xml new file mode 100644 index 0000000000..868e3c765f --- /dev/null +++ b/tests/qemuxml2argvdata/memfd-memory-numa.xml @@ -0,0 +1,33 @@ + <domain type='kvm' id='56'> + <name>instance-00000092</name> + <uuid>126f2720-6f8e-45ab-a886-ec9277079a67</uuid> + <memory unit='KiB'>14680064</memory> + <currentMemory unit='KiB'>14680064</currentMemory> + <memoryBacking> + <hugepages> + <page size="2" unit="M"/> + </hugepages> + <source type='memfd'/> + <access mode='shared'/> + <allocation mode='immediate'/> + </memoryBacking> + <vcpu placement='static'>20</vcpu> + <os> + <type arch='x86_64' machine='pc-i440fx-wily'>hvm</type> + <boot dev='hd'/> + </os> + <cpu> + <topology sockets='1' cores='8' threads='1'/> + <numa> + <cell id='0' cpus='0-7' memory='14680064' unit='KiB'/> + </numa> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <memballoon model='virtio'/> + </devices> + </domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 16c3540798..84edbe7230 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2921,6 +2921,9 @@ mymain(void) DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_KVM); + DO_TEST("memfd-memory-numa", QEMU_CAPS_OBJECT_MEMORY_MEMFD, + QEMU_CAPS_KVM); + DO_TEST("cpu-check-none", QEMU_CAPS_KVM); DO_TEST("cpu-check-partial", QEMU_CAPS_KVM); DO_TEST("cpu-check-full", QEMU_CAPS_KVM); -- 2.19.0.rc0.48.gb9dfa238d5
On Tue, Aug 28, 2018 at 11:39:20PM +0200, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Add a new memoryBacking source type "memfd", support by QEMU (when the capability is available).
Sealing is enabled by default in qemu, and hugepage is easier to setup, which makes it often a better choice than memory-backend-file.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- docs/formatdomain.html.in | 8 ++- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 62 +++++++++++++------ tests/qemuxml2argvdata/memfd-memory-numa.args | 27 ++++++++ tests/qemuxml2argvdata/memfd-memory-numa.xml | 33 ++++++++++ tests/qemuxml2argvtest.c | 3 + 8 files changed, 116 insertions(+), 22 deletions(-) create mode 100644 tests/qemuxml2argvdata/memfd-memory-numa.args create mode 100644 tests/qemuxml2argvdata/memfd-memory-numa.xml
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index eb619a1656..ca656c9f7e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1099,7 +1099,7 @@ </hugepages> <nosharepages/> <locked/> - <source type="file|anonymous"/> + <source type="file|anonymous|memfd"/>
IIUC memfd is really just a different way to implement anonymous memory backing. Why do we need to expose this in the XML, as opposed to just using it automatically when we find it is available ? This would be preferrable as then applications don't need changing to make use of this. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
From: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2c2f193aae..c0481b135d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -509,6 +509,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, "vfio-pci.display", "blockdev", "memory-backend-memfd", + "vhost-user-gpu", + "vhost-user-vga", ); @@ -1150,6 +1152,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "mch", QEMU_CAPS_DEVICE_MCH }, { "sev-guest", QEMU_CAPS_SEV_GUEST }, { "memory-backend-memfd", QEMU_CAPS_OBJECT_MEMORY_MEMFD }, + { "vhost-user-gpu", QEMU_CAPS_DEVICE_VHOST_USER_GPU }, + { "vhost-user-vga", QEMU_CAPS_DEVICE_VHOST_USER_VGA }, }; static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 24ce4545a4..ede38085db 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -493,6 +493,8 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_VFIO_PCI_DISPLAY, /* -device vfio-pci.display */ QEMU_CAPS_BLOCKDEV, /* -blockdev and blockdev-add are supported */ QEMU_CAPS_OBJECT_MEMORY_MEMFD, /* -object memory-backend-memfd */ + QEMU_CAPS_DEVICE_VHOST_USER_GPU, /* -device vhost-user-gpu */ + QEMU_CAPS_DEVICE_VHOST_USER_VGA, /* -device vhost-user-vga */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Learn to accept "vhost-user" model type: <video> <model type='vhost-user'/> </video> (fill the required enum and switches to compile successfully) Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- docs/formatdomain.html.in | 3 ++- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 4 +++- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 9 ++++++--- src/qemu/qemu_domain.c | 1 + src/qemu/qemu_domain_address.c | 1 + tests/domaincapsschemadata/full.xml | 1 + 8 files changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index ca656c9f7e..587ea98993 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -6775,7 +6775,8 @@ qemu-kvm -net nic,model=? /dev/null "vbox", "qxl" (<span class="since">since 0.8.6</span>), "virtio" (<span class="since">since 1.3.0</span>), "gop" (<span class="since">since 3.2.0</span>), or - "none" (<span class="since">since 4.6.0</span>) + "none" (<span class="since">since 4.6.0</span>), or + "vhost-user" (<span class="since">since 4.8.0</span>) depending on the hypervisor features available. The purpose of the type <code>none</code> is to instruct libvirt not to add a default video device in the guest (see the paragraph above). diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 04d7b69dd7..76475a5c69 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -3495,6 +3495,7 @@ <value>virtio</value> <value>gop</value> <value>none</value> + <value>vhost-user</value> </choice> </attribute> <group> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b3a1158e75..6afc5099f5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -595,7 +595,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, "parallels", "virtio", "gop", - "none") + "none", + "vhost-user") VIR_ENUM_IMPL(virDomainVideoVGAConf, VIR_DOMAIN_VIDEO_VGACONF_LAST, "io", @@ -15257,6 +15258,7 @@ virDomainVideoDefaultRAM(const virDomainDef *def, case VIR_DOMAIN_VIDEO_TYPE_VBOX: case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: + case VIR_DOMAIN_VIDEO_TYPE_VHOST_USER: case VIR_DOMAIN_VIDEO_TYPE_GOP: case VIR_DOMAIN_VIDEO_TYPE_NONE: case VIR_DOMAIN_VIDEO_TYPE_LAST: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e72b824226..7ac39e2159 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1427,6 +1427,7 @@ typedef enum { VIR_DOMAIN_VIDEO_TYPE_VIRTIO, VIR_DOMAIN_VIDEO_TYPE_GOP, VIR_DOMAIN_VIDEO_TYPE_NONE, + VIR_DOMAIN_VIDEO_TYPE_VHOST_USER, VIR_DOMAIN_VIDEO_TYPE_LAST } virDomainVideoType; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 830695a147..824e78c0ec 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -106,7 +106,8 @@ VIR_ENUM_IMPL(qemuVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, "", /* don't support parallels */ "", /* no need for virtio */ "" /* don't support gop */, - "" /* 'none' doesn't make sense here */); + "" /* 'none' doesn't make sense here */, + "", /* no need for virtio */); VIR_ENUM_DECL(qemuDeviceVideo) @@ -121,7 +122,8 @@ VIR_ENUM_IMPL(qemuDeviceVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, "", /* don't support parallels */ "virtio-vga", "" /* don't support gop */, - "" /* 'none' doesn't make sense here */); + "" /* 'none' doesn't make sense here */, + "vhost-user-vga"); VIR_ENUM_DECL(qemuDeviceVideoSecondary) @@ -136,7 +138,8 @@ VIR_ENUM_IMPL(qemuDeviceVideoSecondary, VIR_DOMAIN_VIDEO_TYPE_LAST, "", /* don't support parallels */ "virtio-gpu", "" /* don't support gop */, - "" /* 'none' doesn't make sense here */); + "" /* 'none' doesn't make sense here */, + "vhost-user-gpu"); VIR_ENUM_DECL(qemuSoundCodec) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index d052bf4ca8..c8ba7f9cd9 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4613,6 +4613,7 @@ qemuDomainDeviceDefValidateVideo(const virDomainVideoDef *video) case VIR_DOMAIN_VIDEO_TYPE_VMVGA: case VIR_DOMAIN_VIDEO_TYPE_QXL: case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: + case VIR_DOMAIN_VIDEO_TYPE_VHOST_USER: case VIR_DOMAIN_VIDEO_TYPE_LAST: break; } diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index dda14adeb3..5aaf77028b 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -815,6 +815,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev, case VIR_DOMAIN_DEVICE_VIDEO: switch ((virDomainVideoType)dev->data.video->type) { case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: + case VIR_DOMAIN_VIDEO_TYPE_VHOST_USER: return virtioFlags; case VIR_DOMAIN_VIDEO_TYPE_VGA: diff --git a/tests/domaincapsschemadata/full.xml b/tests/domaincapsschemadata/full.xml index eafba1ae5b..1a167de4fb 100644 --- a/tests/domaincapsschemadata/full.xml +++ b/tests/domaincapsschemadata/full.xml @@ -75,6 +75,7 @@ <value>virtio</value> <value>gop</value> <value>none</value> + <value>vhost-user</value> </enum> </video> <hostdev supported='yes'> -- 2.19.0.rc0.48.gb9dfa238d5
On Tue, Aug 28, 2018 at 11:39:22PM +0200, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Learn to accept "vhost-user" model type: <video> <model type='vhost-user'/> </video>
The model element's purpose is to indicate the guest device type. 'vhost-user' is a host backend, not a new guest device type, so this is inappropriate to add as a model. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
From: Marc-André Lureau <marcandre.lureau@redhat.com> If vhost-user-gpu is supported, vhost-user video type is. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c0481b135d..0bf10b32eb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5243,6 +5243,8 @@ virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps, VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_QXL); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_VIRTIO); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_GPU)) + VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_VHOST_USER); return 0; } -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> To support VGA, we need vhost-user-vga device, for "vhost-user" model. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_domain.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index c8ba7f9cd9..57a7546d5b 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10768,6 +10768,10 @@ qemuDomainSupportsVideoVga(virDomainVideoDefPtr video, !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_VGA)) return false; + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_VGA)) + return false; + return true; } -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_domain.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 57a7546d5b..85e749cb56 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4620,7 +4620,8 @@ qemuDomainDeviceDefValidateVideo(const virDomainVideoDef *video) if (!video->primary && video->type != VIR_DOMAIN_VIDEO_TYPE_QXL && - video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO) { + video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO && + video->type != VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("video type '%s' is only valid as primary " "video device"), -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Check qemu capability, and accept 3d acceleration. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_process.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 960c3ed011..027a608367 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5025,6 +5025,8 @@ qemuProcessStartValidateVideo(virDomainObjPtr vm, !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) || (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) || + (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_GPU)) || (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO && video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) { @@ -5035,7 +5037,9 @@ qemuProcessStartValidateVideo(virDomainObjPtr vm, } if (video->accel) { - if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON && + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) { + continue; + } else if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON && (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_VIRGL))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> See function documentation, used in following patch. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_security.c | 48 ++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_security.h | 6 +++++ 2 files changed, 54 insertions(+) diff --git a/src/qemu/qemu_security.c b/src/qemu/qemu_security.c index af3be42854..c722d19ca4 100644 --- a/src/qemu/qemu_security.c +++ b/src/qemu/qemu_security.c @@ -426,6 +426,54 @@ qemuSecurityRestoreChardevLabel(virQEMUDriverPtr driver, } +/* + * qemuSecurityStartVhostUserGPU: + * + * @driver: the QEMU driver + * @def: the domain definition + * @cmd: the command to run + * @existstatus: pointer to int returning exit status of process + * @cmdret: pointer to int returning result of virCommandRun + * + * Start the vhost-user-gpu process with approriate labels. + * This function returns -1 on security setup error, 0 if all the + * setup was done properly. In case the virCommand failed to run + * 0 is returned but cmdret is set appropriately with the process + * exitstatus also set. + */ +int +qemuSecurityStartVhostUserGPU(virQEMUDriverPtr driver, + virDomainDefPtr def, + virCommandPtr cmd, + int *exitstatus, + int *cmdret) +{ + int ret = -1; + + if (virSecurityManagerSetChildProcessLabel(driver->securityManager, + def, cmd) < 0) + goto cleanup; + + if (virSecurityManagerPreFork(driver->securityManager) < 0) + goto cleanup; + + ret = 0; + + *cmdret = virCommandRun(cmd, exitstatus); + + virSecurityManagerPostFork(driver->securityManager); + + if (*cmdret < 0) + goto cleanup; + + return 0; + +cleanup: + + return ret; +} + + /* * qemuSecurityStartTPMEmulator: * diff --git a/src/qemu/qemu_security.h b/src/qemu/qemu_security.h index a189b63828..75131120b9 100644 --- a/src/qemu/qemu_security.h +++ b/src/qemu/qemu_security.h @@ -84,6 +84,12 @@ int qemuSecurityRestoreChardevLabel(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr); +int qemuSecurityStartVhostUserGPU(virQEMUDriverPtr driver, + virDomainDefPtr def, + virCommandPtr cmd, + int *exitstatus, + int *cmdret); + int qemuSecurityStartTPMEmulator(virQEMUDriverPtr driver, virDomainDefPtr def, virCommandPtr cmd, -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Similar to the qemu_tpm.c, add a unit with a few functions to start/stop and setup the cgroup of the external vhost-user-gpu process. See function documentation. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/conf/device_conf.h | 1 + src/qemu/Makefile.inc.am | 2 + src/qemu/qemu_vhost_user_gpu.c | 318 +++++++++++++++++++++++++++++++++ src/qemu/qemu_vhost_user_gpu.h | 48 +++++ 4 files changed, 369 insertions(+) create mode 100644 src/qemu/qemu_vhost_user_gpu.c create mode 100644 src/qemu/qemu_vhost_user_gpu.h diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index ff7d6c9d5f..79a7ea9fe2 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -175,6 +175,7 @@ struct _virDomainDeviceInfo { * cases we might want to prevent that from happening by * locking the isolation group */ bool isolationGroupLocked; + int vhost_user_fd; }; int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am index 2afa67f195..28daf9d426 100644 --- a/src/qemu/Makefile.inc.am +++ b/src/qemu/Makefile.inc.am @@ -56,6 +56,8 @@ QEMU_DRIVER_SOURCES = \ qemu/qemu_qapi.h \ qemu/qemu_tpm.c \ qemu/qemu_tpm.h \ + qemu/qemu_vhost_user_gpu.c \ + qemu/qemu_vhost_user_gpu.h \ $(NULL) diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c new file mode 100644 index 0000000000..9007614020 --- /dev/null +++ b/src/qemu/qemu_vhost_user_gpu.c @@ -0,0 +1,318 @@ +/* + * qemu_vhost_user_gpu.c: QEMU vhost-user GPU support + * + * Copyright (C) 2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Marc-André Lureau <marcandre.lureau@redhat.com> + */ + +#include <config.h> + +#include "qemu_extdevice.h" +#include "qemu_domain.h" +#include "qemu_security.h" + +#include "conf/domain_conf.h" +#include "vircommand.h" +#include "viralloc.h" +#include "virlog.h" +#include "virutil.h" +#include "virfile.h" +#include "virstring.h" +#include "virtime.h" +#include "virpidfile.h" +#include "qemu_vhost_user_gpu.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_LOG_INIT("qemu.vhost-user-gpu") + +/* + * Look up the vhost-user-gpu executable; to be found on the host + */ +static char *vhost_user_gpu_path; + +static int +qemuVhostUserGPUInit(void) +{ + if (!vhost_user_gpu_path) { + vhost_user_gpu_path = virFindFileInPath("vhost-user-gpu"); + if (!vhost_user_gpu_path) { + virReportSystemError(ENOENT, "%s", + _("Unable to find 'vhost-user-gpu' binary in $PATH")); + return -1; + } + if (!virFileIsExecutable(vhost_user_gpu_path)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("vhost-user-gpu %s is not an executable"), + vhost_user_gpu_path); + VIR_FREE(vhost_user_gpu_path); + return -1; + } + } + + return 0; +} + + +static char * +qemuVhostUserGPUCreatePidFilename(const char *stateDir, + const char *shortName, + const char *alias) +{ + char *pidfile = NULL; + char *devicename = NULL; + + if (virAsprintf(&devicename, "%s-%s-vhost-user-gpu", shortName, alias) < 0) + return NULL; + + pidfile = virPidFileBuildPath(stateDir, devicename); + + VIR_FREE(devicename); + + return pidfile; +} + + +/* + * qemuVhostUserGPUGetPid + * + * @stateDir: the directory where vhost-user-gpu writes the pidfile into + * @shortName: short name of the domain + * @alias: video device alias + * @pid: pointer to pid + * + * Return -errno upon error, or zero on successful reading of the pidfile. + * If the PID was not still alive, zero will be returned, and @pid will be + * set to -1; + */ +static int +qemuVhostUserGPUGetPid(const char *stateDir, + const char *shortName, + const char *alias, + pid_t *pid) +{ + int ret; + char *pidfile = qemuVhostUserGPUCreatePidFilename(stateDir, shortName, alias); + if (!pidfile) + return -ENOMEM; + + ret = virPidFileReadPathIfAlive(pidfile, pid, vhost_user_gpu_path); + + VIR_FREE(pidfile); + + return ret; +} + + +/* + * qemuExtVhostUserGPUStart: + * + * @driver: QEMU driver + * @def: domain definition + * @video: the video device + * @logCtxt: log context + * + * Start the external vhost-user-gpu process: + * - open a socketpair for vhost-user communication + * - have the command line built + * - start the external process and sync with it before QEMU start + */ +int qemuExtVhostUserGPUStart(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video, + qemuDomainLogContextPtr logCtxt) +{ + int ret = -1; + virCommandPtr cmd = NULL; + int exitstatus = 0; + char *errbuf = NULL; + virQEMUDriverConfigPtr cfg; + char *pidfile, *shortName = virDomainDefGetShortName(def); + virTimeBackOffVar timebackoff; + const unsigned long long timeout = 500000; /* ms */ + int cmdret = 0, rc; + int pair[2] = { -1, -1 }; + + pid_t pid; + + if (!shortName) + return -1; + + cfg = virQEMUDriverGetConfig(driver); + + /* stop any left-over for this VM */ + qemuExtVhostUserGPUStop(driver, def, video); + + if (!(pidfile = qemuVhostUserGPUCreatePidFilename( + cfg->stateDir, shortName, video->info.alias))) + goto error; + + if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) < 0) { + virReportSystemError(errno, "%s", _("failed to create socket")); + goto error; + } + + cmd = virCommandNew(vhost_user_gpu_path); + if (!cmd) + goto error; + + virCommandClearCaps(cmd); + virCommandDaemonize(cmd); + + if (qemuExtDeviceLogCommand(logCtxt, cmd, "vhost-user-gpu") < 0) + goto error; + + virCommandAddArgList(cmd, "--pid", pidfile, NULL); + virCommandAddArgFormat(cmd, "--fd=%d", pair[0]); + virCommandPassFD(cmd, pair[0], VIR_COMMAND_PASS_FD_CLOSE_PARENT); + pair[0] = -1; + + if (video->accel && video->accel->accel3d) { + virCommandAddArg(cmd, "--virgl"); + } + if (qemuSecurityStartVhostUserGPU(driver, def, cmd, + &exitstatus, &cmdret) < 0) + goto error; + + if (cmdret < 0 || exitstatus != 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not start 'vhost-user-gpu'. exitstatus: %d, " + "error: %s"), exitstatus, errbuf); + goto cleanup; + } + + /* check that the helper has written its pid into the file */ + if (virTimeBackOffStart(&timebackoff, 1, timeout) < 0) + goto error; + while (virTimeBackOffWait(&timebackoff)) { + rc = qemuVhostUserGPUGetPid(cfg->stateDir, shortName, video->info.alias, &pid); + if (rc < 0) + continue; + if (rc == 0 && pid == (pid_t)-1) + goto error; + break; + } + + ret = 0; + video->info.vhost_user_fd = pair[1]; + pair[1] = -1; + +cleanup: + VIR_FORCE_CLOSE(pair[0]); + VIR_FORCE_CLOSE(pair[1]); + virObjectUnref(cfg); + VIR_FREE(pidfile); + virCommandFree(cmd); + + return ret; + +error: + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("vhost-user-gpu failed to start")); + goto cleanup; +} + + +/* + * qemuExtVhostUserGPUStop: + * + * @driver: QEMU driver + * @def: domain definition + * @video: the video device + * + * Check if vhost-user process pidfile is around, kill the process, + * and remove the pidfile. + */ +void qemuExtVhostUserGPUStop(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video) +{ + virErrorPtr orig_err; + char *pidfile, *shortName = virDomainDefGetShortName(def); + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + + if (qemuVhostUserGPUInit() < 0) + return; + + if (!(pidfile = qemuVhostUserGPUCreatePidFilename( + cfg->stateDir, shortName, video->info.alias))) { + VIR_WARN("Unable to construct vhost-user-gpu pidfile path"); + return; + } + + virErrorPreserveLast(&orig_err); + if (virPidFileForceCleanupPath(pidfile) < 0) { + VIR_WARN("Unable to kill vhost-user-gpu process"); + } else { + if (unlink(pidfile) < 0 && + errno != ENOENT) { + virReportSystemError(errno, + _("Unable to remove stale pidfile %s"), + pidfile); + } + } + virErrorRestore(&orig_err); + + VIR_FREE(pidfile); +} + + +/* + * qemuExtVhostUserGPUSetupCgroup: + * + * @driver: QEMU driver + * @def: domain definition + * @video: the video device + * @cgroupe: a cgroup + * + * Add the vhost-user-gpu PID to the given cgroup. + */ +int +qemuExtVhostUserGPUSetupCgroup(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video, + virCgroupPtr cgroup) +{ + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + char *pidfile = NULL; + char *shortName = NULL; + int ret = -1, rc; + pid_t pid; + + shortName = virDomainDefGetShortName(def); + if (!shortName) + goto cleanup; + + rc = qemuVhostUserGPUGetPid(cfg->stateDir, shortName, video->info.alias, &pid); + if (rc < 0 || (rc == 0 && pid == (pid_t)-1)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not get process id of vhost-user-gpu")); + goto cleanup; + } + if (virCgroupAddTask(cgroup, pid) < 0) + goto cleanup; + + ret = 0; + + cleanup: + VIR_FREE(pidfile); + VIR_FREE(shortName); + virObjectUnref(cfg); + + return ret; +} diff --git a/src/qemu/qemu_vhost_user_gpu.h b/src/qemu/qemu_vhost_user_gpu.h new file mode 100644 index 0000000000..0f5331cce8 --- /dev/null +++ b/src/qemu/qemu_vhost_user_gpu.h @@ -0,0 +1,48 @@ +/* + * qemu_vhost_user_gpu.h: QEMU vhost-user GPU support + * + * Copyright (C) 2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Marc-André Lureau <marcandre.lureau@redhat.com> + */ +#ifndef __QEMU_VHOST_USER_GPU_H__ +# define __QEMU_VHOST_USER_GPU_H__ + +# include "qemu_conf.h" +# include "vircommand.h" + +int qemuExtVhostUserGPUStart(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video, + qemuDomainLogContextPtr logCtxt) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) + ATTRIBUTE_RETURN_CHECK; + +void qemuExtVhostUserGPUStop(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + +int +qemuExtVhostUserGPUSetupCgroup(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video, + virCgroupPtr cgroup) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) + ATTRIBUTE_RETURN_CHECK; + +#endif /* __QEMU_VHOST_USER_GPU_H__ */ -- 2.19.0.rc0.48.gb9dfa238d5
On Tue, Aug 28, 2018 at 11:39:28PM +0200, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Similar to the qemu_tpm.c, add a unit with a few functions to start/stop and setup the cgroup of the external vhost-user-gpu process. See function documentation.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/conf/device_conf.h | 1 + src/qemu/Makefile.inc.am | 2 + src/qemu/qemu_vhost_user_gpu.c | 318 +++++++++++++++++++++++++++++++++ src/qemu/qemu_vhost_user_gpu.h | 48 +++++ 4 files changed, 369 insertions(+) create mode 100644 src/qemu/qemu_vhost_user_gpu.c create mode 100644 src/qemu/qemu_vhost_user_gpu.h
diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index ff7d6c9d5f..79a7ea9fe2 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -175,6 +175,7 @@ struct _virDomainDeviceInfo { * cases we might want to prevent that from happening by * locking the isolation group */ bool isolationGroupLocked; + int vhost_user_fd; };
int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am index 2afa67f195..28daf9d426 100644 --- a/src/qemu/Makefile.inc.am +++ b/src/qemu/Makefile.inc.am @@ -56,6 +56,8 @@ QEMU_DRIVER_SOURCES = \ qemu/qemu_qapi.h \ qemu/qemu_tpm.c \ qemu/qemu_tpm.h \ + qemu/qemu_vhost_user_gpu.c \ + qemu/qemu_vhost_user_gpu.h \ $(NULL)
diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c new file mode 100644 index 0000000000..9007614020 --- /dev/null +++ b/src/qemu/qemu_vhost_user_gpu.c @@ -0,0 +1,318 @@ +/* + * qemu_vhost_user_gpu.c: QEMU vhost-user GPU support + * + * Copyright (C) 2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Marc-André Lureau <marcandre.lureau@redhat.com> + */ + +#include <config.h> + +#include "qemu_extdevice.h" +#include "qemu_domain.h" +#include "qemu_security.h" + +#include "conf/domain_conf.h" +#include "vircommand.h" +#include "viralloc.h" +#include "virlog.h" +#include "virutil.h" +#include "virfile.h" +#include "virstring.h" +#include "virtime.h" +#include "virpidfile.h" +#include "qemu_vhost_user_gpu.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_LOG_INIT("qemu.vhost-user-gpu") + +/* + * Look up the vhost-user-gpu executable; to be found on the host + */ +static char *vhost_user_gpu_path; + +static int +qemuVhostUserGPUInit(void) +{ + if (!vhost_user_gpu_path) { + vhost_user_gpu_path = virFindFileInPath("vhost-user-gpu");
This binary is in the 'contrib' directory in QEMU source tree which generally indicates that it is just a proof of concept / demoware, not an officially supported part of QEMU. IMHO we cannot merge code that relies on this. We need something that is going to be stable & supported indefinitely, at least to the same level that QEMU itself is. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On Tue, Aug 28, 2018 at 11:39:28PM +0200, marcandre.lureau@redhat.com wrote:
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Similar to the qemu_tpm.c, add a unit with a few functions to start/stop and setup the cgroup of the external vhost-user-gpu process. See function documentation.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/conf/device_conf.h | 1 + src/qemu/Makefile.inc.am | 2 + src/qemu/qemu_vhost_user_gpu.c | 318 +++++++++++++++++++++++++++++++++ src/qemu/qemu_vhost_user_gpu.h | 48 +++++ 4 files changed, 369 insertions(+) create mode 100644 src/qemu/qemu_vhost_user_gpu.c create mode 100644 src/qemu/qemu_vhost_user_gpu.h
diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index ff7d6c9d5f..79a7ea9fe2 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -175,6 +175,7 @@ struct _virDomainDeviceInfo { * cases we might want to prevent that from happening by * locking the isolation group */ bool isolationGroupLocked; + int vhost_user_fd; };
int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am index 2afa67f195..28daf9d426 100644 --- a/src/qemu/Makefile.inc.am +++ b/src/qemu/Makefile.inc.am @@ -56,6 +56,8 @@ QEMU_DRIVER_SOURCES = \ qemu/qemu_qapi.h \ qemu/qemu_tpm.c \ qemu/qemu_tpm.h \ + qemu/qemu_vhost_user_gpu.c \ + qemu/qemu_vhost_user_gpu.h \ $(NULL)
diff --git a/src/qemu/qemu_vhost_user_gpu.c b/src/qemu/qemu_vhost_user_gpu.c new file mode 100644 index 0000000000..9007614020 --- /dev/null +++ b/src/qemu/qemu_vhost_user_gpu.c @@ -0,0 +1,318 @@ +/* + * qemu_vhost_user_gpu.c: QEMU vhost-user GPU support + * + * Copyright (C) 2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Marc-André Lureau <marcandre.lureau@redhat.com> + */ + +#include <config.h> + +#include "qemu_extdevice.h" +#include "qemu_domain.h" +#include "qemu_security.h" + +#include "conf/domain_conf.h" +#include "vircommand.h" +#include "viralloc.h" +#include "virlog.h" +#include "virutil.h" +#include "virfile.h" +#include "virstring.h" +#include "virtime.h" +#include "virpidfile.h" +#include "qemu_vhost_user_gpu.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +VIR_LOG_INIT("qemu.vhost-user-gpu") + +/* + * Look up the vhost-user-gpu executable; to be found on the host + */ +static char *vhost_user_gpu_path; + +static int +qemuVhostUserGPUInit(void) +{ + if (!vhost_user_gpu_path) { + vhost_user_gpu_path = virFindFileInPath("vhost-user-gpu"); + if (!vhost_user_gpu_path) { + virReportSystemError(ENOENT, "%s", + _("Unable to find 'vhost-user-gpu' binary in $PATH")); + return -1; + } + if (!virFileIsExecutable(vhost_user_gpu_path)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("vhost-user-gpu %s is not an executable"), + vhost_user_gpu_path); + VIR_FREE(vhost_user_gpu_path); + return -1; + } + } + + return 0; +} + + +static char * +qemuVhostUserGPUCreatePidFilename(const char *stateDir, + const char *shortName, + const char *alias) +{ + char *pidfile = NULL; + char *devicename = NULL; + + if (virAsprintf(&devicename, "%s-%s-vhost-user-gpu", shortName, alias) < 0) + return NULL; + + pidfile = virPidFileBuildPath(stateDir, devicename); + + VIR_FREE(devicename); + + return pidfile; +} + + +/* + * qemuVhostUserGPUGetPid + * + * @stateDir: the directory where vhost-user-gpu writes the pidfile into + * @shortName: short name of the domain + * @alias: video device alias + * @pid: pointer to pid + * + * Return -errno upon error, or zero on successful reading of the pidfile. + * If the PID was not still alive, zero will be returned, and @pid will be + * set to -1; + */ +static int +qemuVhostUserGPUGetPid(const char *stateDir, + const char *shortName, + const char *alias, + pid_t *pid) +{ + int ret; + char *pidfile = qemuVhostUserGPUCreatePidFilename(stateDir, shortName, alias); + if (!pidfile) + return -ENOMEM; + + ret = virPidFileReadPathIfAlive(pidfile, pid, vhost_user_gpu_path); + + VIR_FREE(pidfile); + + return ret; +} + + +/* + * qemuExtVhostUserGPUStart: + * + * @driver: QEMU driver + * @def: domain definition + * @video: the video device + * @logCtxt: log context + * + * Start the external vhost-user-gpu process: + * - open a socketpair for vhost-user communication + * - have the command line built + * - start the external process and sync with it before QEMU start + */ +int qemuExtVhostUserGPUStart(virQEMUDriverPtr driver, + virDomainDefPtr def, + virDomainVideoDefPtr video, + qemuDomainLogContextPtr logCtxt) +{ + int ret = -1; + virCommandPtr cmd = NULL; + int exitstatus = 0; + char *errbuf = NULL; + virQEMUDriverConfigPtr cfg; + char *pidfile, *shortName = virDomainDefGetShortName(def); + virTimeBackOffVar timebackoff; + const unsigned long long timeout = 500000; /* ms */
500 * 1000 /* ms */ is easier to read
+ int cmdret = 0, rc; + int pair[2] = { -1, -1 }; + + pid_t pid; + + if (!shortName) + return -1; + + cfg = virQEMUDriverGetConfig(driver); + + /* stop any left-over for this VM */ + qemuExtVhostUserGPUStop(driver, def, video); + + if (!(pidfile = qemuVhostUserGPUCreatePidFilename( + cfg->stateDir, shortName, video->info.alias))) + goto error; + + if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) < 0) { + virReportSystemError(errno, "%s", _("failed to create socket")); + goto error; + }
This socket will inherit the label from libvirtd and it cannot be changed afterwards, see: https://bugzilla.redhat.com/show_bug.cgi?id=999926 We have SecuritySetSocketLabel and SecurityClearSocketLabel that change the context temporarily. Having them on-disk would let us change the label afterwards, but for FD passing, they should be labeled before the fork (unlike all the other paths which we label after forking) Jano
From: Marc-André Lureau <marcandre.lureau@redhat.com> vhost-user doesn't have a virgl option, it's given to the vhost-user-gpu helper process instead. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_command.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 824e78c0ec..2f3bd2a98e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4432,9 +4432,11 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, virBufferAsprintf(&buf, ",id=%s", video->info.alias); - if (video->accel && video->accel->accel3d == VIR_TRISTATE_SWITCH_ON) { - virBufferAsprintf(&buf, ",virgl=%s", - virTristateSwitchTypeToString(video->accel->accel3d)); + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO) { + if (video->accel && video->accel->accel3d == VIR_TRISTATE_SWITCH_ON) { + virBufferAsprintf(&buf, ",virgl=%s", + virTristateSwitchTypeToString(video->accel->accel3d)); + } } if (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL) { -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> It's a virtio device, like virtio-gpu. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_domain_address.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 5aaf77028b..978bef59ed 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -330,7 +330,8 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr def, virDomainVideoDefPtr video = def->videos[i]; if (video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && - video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO) + (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO || + video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER)) video->info.type = type; } -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Each vhost-user-gpu needs its own helper gpu process. Start/stop them, and apply the emulator cgroup controller. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_extdevice.c | 47 ++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c index d982922470..8ec703a9b0 100644 --- a/src/qemu/qemu_extdevice.c +++ b/src/qemu/qemu_extdevice.c @@ -25,6 +25,7 @@ #include "qemu_extdevice.h" #include "qemu_domain.h" #include "qemu_tpm.h" +#include "qemu_vhost_user_gpu.h" #include "viralloc.h" #include "virlog.h" @@ -132,11 +133,21 @@ qemuExtDevicesStart(virQEMUDriverPtr driver, virDomainDefPtr def, qemuDomainLogContextPtr logCtxt) { - int ret = 0; + int i, ret = 0; if (qemuExtDevicesInitPaths(driver, def) < 0) return -1; + for (i = 0; i < def->nvideos; i++) { + virDomainVideoDefPtr video = def->videos[i]; + + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) { + ret = qemuExtVhostUserGPUStart(driver, def, video, logCtxt); + if (ret < 0) + return ret; + } + } + if (def->tpm) ret = qemuExtTPMStart(driver, def, logCtxt); @@ -148,9 +159,19 @@ void qemuExtDevicesStop(virQEMUDriverPtr driver, virDomainDefPtr def) { + int i; + if (qemuExtDevicesInitPaths(driver, def) < 0) return; + for (i = 0; i < def->nvideos; i++) { + virDomainVideoDefPtr video = def->videos[i]; + + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) { + qemuExtVhostUserGPUStop(driver, def, video); + } + } + if (def->tpm) qemuExtTPMStop(driver, def); } @@ -159,6 +180,13 @@ qemuExtDevicesStop(virQEMUDriverPtr driver, bool qemuExtDevicesHasDevice(virDomainDefPtr def) { + int i; + + for (i = 0; i < def->nvideos; i++) { + if (def->videos[i]->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) + return true; + } + if (def->tpm && def->tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR) return true; @@ -171,10 +199,19 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver, virDomainDefPtr def, virCgroupPtr cgroup) { - int ret = 0; + int i; - if (def->tpm) - ret = qemuExtTPMSetupCgroup(driver, def, cgroup); + for (i = 0; i < def->nvideos; i++) { + virDomainVideoDefPtr video = def->videos[i]; - return ret; + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER && + qemuExtVhostUserGPUSetupCgroup(driver, def, video, cgroup) < 0) + return -1; + } + + if (def->tpm && + qemuExtTPMSetupCgroup(driver, def, cgroup) < 0) + return -1; + + return 0; } -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Pass the vhost-user socket to a chardev, and associate a vhost-user-backend with it for each vhost-user-gpu. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_command.c | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2f3bd2a98e..5d08ea7d50 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4577,6 +4577,38 @@ qemuBuildVgaVideoCommand(virCommandPtr cmd, } +static char * +qemuBuildVhostUserBackendStr(virDomainVideoDefPtr video, + virCommandPtr cmd, + char **chardev) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + + if (virAsprintf(chardev, "socket,id=chr-vu-%s,fd=%d", + video->info.alias, video->info.vhost_user_fd) < 0) + goto error; + + virCommandPassFD(cmd, video->info.vhost_user_fd, + VIR_COMMAND_PASS_FD_CLOSE_PARENT); + + video->info.vhost_user_fd = -1; + + virBufferAsprintf(&buf, "vhost-user-backend,id=vu-%s,chardev=chr-vu-%s", + video->info.alias, video->info.alias); + + if (virBufferCheckError(&buf) < 0) + goto error; + + return virBufferContentAndReset(&buf); + +error: + VIR_FREE(*chardev); + virBufferFreeAndReset(&buf); + return NULL; + +} + + static int qemuBuildVideoCommandLine(virCommandPtr cmd, const virDomainDef *def, @@ -4584,6 +4616,24 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, { size_t i; + for (i = 0; i < def->nvideos; i++) { + char *optstr; + char *chardev = NULL; + virDomainVideoDefPtr video = def->videos[i]; + + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) { + + if (!(optstr = qemuBuildVhostUserBackendStr(video, cmd, &chardev))) + return -1; + + virCommandAddArgList(cmd, "-chardev", chardev, NULL); + virCommandAddArgList(cmd, "-object", optstr, NULL); + + VIR_FREE(optstr); + VIR_FREE(chardev); + } + } + for (i = 0; i < def->nvideos; i++) { char *str = NULL; virDomainVideoDefPtr video = def->videos[i]; -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Change the model name to "vhost-user-gpu-pci" if running on PCI. Set the "max_outputs" property. Associate the device with the "vhost-user" backend. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- src/qemu/qemu_command.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5d08ea7d50..78535fbd03 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4421,7 +4421,7 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, goto error; } - if (STREQ(model, "virtio-gpu")) { + if (STREQ(model, "virtio-gpu") || STREQ(model, "vhost-user-gpu")) { if (video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) virBufferAsprintf(&buf, "%s-ccw", model); else @@ -4469,6 +4469,10 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, if (video->heads) virBufferAsprintf(&buf, ",max_outputs=%u", video->heads); } + } else if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) { + if (video->heads) + virBufferAsprintf(&buf, ",max_outputs=%u", video->heads); + virBufferAsprintf(&buf, ",vhost-user=vu-%s", video->info.alias); } else if (video->vram && ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA && virQEMUCapsGet(qemuCaps, QEMU_CAPS_VGA_VGAMEM)) || -- 2.19.0.rc0.48.gb9dfa238d5
From: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- .../vhost-user-gpu-secondary.args | 33 ++++++++++++++ .../vhost-user-gpu-secondary.xml | 44 +++++++++++++++++++ tests/qemuxml2argvdata/vhost-user-vga.args | 30 +++++++++++++ tests/qemuxml2argvdata/vhost-user-vga.xml | 41 +++++++++++++++++ tests/qemuxml2argvtest.c | 12 +++++ 5 files changed, 160 insertions(+) create mode 100644 tests/qemuxml2argvdata/vhost-user-gpu-secondary.args create mode 100644 tests/qemuxml2argvdata/vhost-user-gpu-secondary.xml create mode 100644 tests/qemuxml2argvdata/vhost-user-vga.args create mode 100644 tests/qemuxml2argvdata/vhost-user-vga.xml diff --git a/tests/qemuxml2argvdata/vhost-user-gpu-secondary.args b/tests/qemuxml2argvdata/vhost-user-gpu-secondary.args new file mode 100644 index 0000000000..bcff234ee2 --- /dev/null +++ b/tests/qemuxml2argvdata/vhost-user-gpu-secondary.args @@ -0,0 +1,33 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-i686 \ +-name QEMUGuest1 \ +-S \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-object memory-backend-memfd,id=ram-node0,share=yes,size=224395264 \ +-numa node,nodeid=0,cpus=0,memdev=ram-node0 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-usb \ +-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ +-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ +-chardev socket,id=chr-vu-video0,fd=0 \ +-object vhost-user-backend,id=vu-video0,chardev=chr-vu-video0 \ +-chardev socket,id=chr-vu-video1,fd=0 \ +-object vhost-user-backend,id=vu-video1,chardev=chr-vu-video1 \ +-device vhost-user-vga,id=video0,max_outputs=1,vhost-user=vu-video0,bus=pci.0,addr=0x2 \ +-device vhost-user-gpu-pci,id=video1,max_outputs=1,vhost-user=vu-video1,bus=pci.0,addr=0x4 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/vhost-user-gpu-secondary.xml b/tests/qemuxml2argvdata/vhost-user-gpu-secondary.xml new file mode 100644 index 0000000000..52729bcf70 --- /dev/null +++ b/tests/qemuxml2argvdata/vhost-user-gpu-secondary.xml @@ -0,0 +1,44 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <memoryBacking> + <access mode='shared'/> + <source type='memfd'/> + </memoryBacking> + <vcpu placement='static'>1</vcpu> + <cpu> + <numa> + <cell id='0' cpus='0' memory='219136' unit='KiB'/> + </numa> + </cpu> + <os> + <type arch='i686' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-i686</emulator> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='usb' index='0'/> + <controller type='ide' index='0'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'/> + <video> + <model type='vhost-user' heads='1'/> + </video> + <video> + <model type='vhost-user' heads='1'/> + </video> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/vhost-user-vga.args b/tests/qemuxml2argvdata/vhost-user-vga.args new file mode 100644 index 0000000000..15aab7d7e7 --- /dev/null +++ b/tests/qemuxml2argvdata/vhost-user-vga.args @@ -0,0 +1,30 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-i686 \ +-name QEMUGuest1 \ +-S \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-object memory-backend-memfd,id=ram-node0,share=yes,size=224395264 \ +-numa node,nodeid=0,cpus=0,memdev=ram-node0 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-usb \ +-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ +-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ +-chardev socket,id=chr-vu-video0,fd=0 \ +-object vhost-user-backend,id=vu-video0,chardev=chr-vu-video0 \ +-device vhost-user-vga,id=video0,max_outputs=1,vhost-user=vu-video0,bus=pci.0,addr=0x2 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/vhost-user-vga.xml b/tests/qemuxml2argvdata/vhost-user-vga.xml new file mode 100644 index 0000000000..39138c7ca3 --- /dev/null +++ b/tests/qemuxml2argvdata/vhost-user-vga.xml @@ -0,0 +1,41 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <memoryBacking> + <access mode='shared'/> + <source type='memfd'/> + </memoryBacking> + <vcpu placement='static'>1</vcpu> + <cpu> + <numa> + <cell id='0' cpus='0' memory='219136' unit='KiB'/> + </numa> + </cpu> + <os> + <type arch='i686' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-i686</emulator> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='usb' index='0'/> + <controller type='ide' index='0'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'/> + <video> + <model type='vhost-user' heads='1'/> + </video> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 84edbe7230..2e5d237608 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3008,6 +3008,18 @@ mymain(void) DO_TEST("riscv64-virt", QEMU_CAPS_DEVICE_VIRTIO_MMIO); + DO_TEST("vhost-user-vga", + QEMU_CAPS_OBJECT_MEMORY_MEMFD, + QEMU_CAPS_DEVICE_VIDEO_PRIMARY, + QEMU_CAPS_DEVICE_VHOST_USER_GPU, + QEMU_CAPS_DEVICE_VHOST_USER_VGA); + + DO_TEST("vhost-user-gpu-secondary", + QEMU_CAPS_OBJECT_MEMORY_MEMFD, + QEMU_CAPS_DEVICE_VIDEO_PRIMARY, + QEMU_CAPS_DEVICE_VHOST_USER_GPU, + QEMU_CAPS_DEVICE_VHOST_USER_VGA); + if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); -- 2.19.0.rc0.48.gb9dfa238d5
Hi,
This series was run against 'syntax-check' test by patchew.org, which failed, please find the details below:
Type: series
Message-id: 20180828213934.29749-1-marcandre.lureau@redhat.com
Subject: [libvirt] [RFC v2 00/16] Add vhost-user-gpu support
=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
time bash -c './autogen.sh && make syntax-check'
=== TEST SCRIPT END ===
Updating bcb55ab053bc79561b55d0394490f4b64e0f2d01
>From https://github.com/patchew-project/libvirt
* [new tag] patchew/20180828213934.29749-1-marcandre.lureau@redhat.com -> patchew/20180828213934.29749-1-marcandre.lureau@redhat.com
Switched to a new branch 'test'
60c70de76c tests: add vhost-user-gpu xml2argv tests
a9cd9e2586 qemu: build vhost-user-gpu video device arguments
3b0a7b5bf1 qemu: build vhost-user-backend for vhost-user-gpu
e4b4477bb2 qemu: start/stop the vhost-user-gpu external device
38ee037061 qemu: set default address type on vhost-user video model
164687917c qemu: restrict 'virgl=' option to 'virtio' video type
bd7e1ee2ed qemu: add vhost-user-gpu helper unit
66cbc4a25e qemu: add qemuSecurityStartVhostUserGPU helper
20e347154d qemu: validate vhost-user video model
70ac51e530 qemu: vhost-user is valid as non-primary video device
fc06292075 qemu: check that qemu is vhost-user-vga capable
5385601b79 qemu: fill the vhost-user video type capability
bd948d4110 domain: add "vhost-user" video type
d7b12bd279 qemu: add vhost-user-gpu capabilities checks
b1b7621d5a qemu: add memfd memory backing
4d7876b93f qemu: add memory-backend-memfd capability check
=== OUTPUT BEGIN ===
Updating submodules...
Submodule 'gnulib' (https://git.savannah.gnu.org/git/gnulib.git/) registered for path '.gnulib'
Submodule 'keycodemapdb' (https://gitlab.com/keycodemap/keycodemapdb.git) registered for path 'src/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-y8o46i69/src/.gnulib'...
Cloning into '/var/tmp/patchew-tester-tmp-y8o46i69/src/src/keycodemapdb'...
Submodule path '.gnulib': checked out '68df637b5f1b5c10370f6981d2a43a5cf74368df'
Submodule path 'src/keycodemapdb': checked out '16e5b0787687d8904dad2c026107409eb9bfcb95'
Running bootstrap...
./bootstrap: Bootstrapping from checked-out libvirt sources...
./bootstrap: consider installing git-merge-changelog from gnulib
./bootstrap: getting gnulib files...
running: libtoolize --install --copy
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
libtoolize: copying file 'build-aux/config.guess'
libtoolize: copying file 'build-aux/config.sub'
libtoolize: copying file 'build-aux/install-sh'
libtoolize: copying file 'build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
./bootstrap: .gnulib/gnulib-tool --no-changelog --aux-dir=build-aux --doc-base=doc --lib=libgnu --m4-base=m4/ --source-base=gnulib/lib/ --tests-base=gnulib/tests --local-dir=gnulib/local --lgpl=2 --with-tests --makefile-name=gnulib.mk --avoid=pt_chown --avoid=lock-tests --libtool --import ...
Module list with included dependencies (indented):
absolute-header
accept
accept-tests
alloca
alloca-opt
alloca-opt-tests
allocator
areadlink
areadlink-tests
arpa_inet
arpa_inet-tests
assure
autobuild
base64
base64-tests
binary-io
binary-io-tests
bind
bind-tests
bitrotate
bitrotate-tests
btowc
btowc-tests
builtin-expect
byteswap
byteswap-tests
c-ctype
c-ctype-tests
c-strcase
c-strcase-tests
c-strcasestr
c-strcasestr-tests
calloc-posix
canonicalize-lgpl
canonicalize-lgpl-tests
careadlinkat
chown
chown-tests
clock-time
cloexec
cloexec-tests
close
close-tests
configmake
connect
connect-tests
count-leading-zeros
count-leading-zeros-tests
count-one-bits
count-one-bits-tests
ctype
ctype-tests
dirname-lgpl
dosname
double-slash-root
dup
dup-tests
dup2
dup2-tests
environ
environ-tests
errno
errno-tests
error
execinfo
exitfail
extensions
extern-inline
fatal-signal
fclose
fclose-tests
fcntl
fcntl-h
fcntl-h-tests
fcntl-tests
fd-hook
fdatasync
fdatasync-tests
fdopen
fdopen-tests
fflush
fflush-tests
ffs
ffs-tests
ffsl
ffsl-tests
fgetc-tests
filename
flexmember
float
float-tests
fnmatch
fnmatch-tests
fpieee
fpucw
fpurge
fpurge-tests
fputc-tests
fread-tests
freading
freading-tests
fseek
fseek-tests
fseeko
fseeko-tests
fstat
fstat-tests
fsync
fsync-tests
ftell
ftell-tests
ftello
ftello-tests
ftruncate
ftruncate-tests
func
func-tests
fwrite-tests
getaddrinfo
getaddrinfo-tests
getcwd-lgpl
getcwd-lgpl-tests
getdelim
getdelim-tests
getdtablesize
getdtablesize-tests
getgroups
getgroups-tests
gethostname
gethostname-tests
getline
getline-tests
getopt-posix
getopt-posix-tests
getpagesize
getpass
getpeername
getpeername-tests
getprogname
getprogname-tests
getsockname
getsockname-tests
getsockopt
getsockopt-tests
gettext-h
gettimeofday
gettimeofday-tests
getugroups
gitlog-to-changelog
gnumakefile
grantpt
grantpt-tests
hard-locale
havelib
host-cpu-c-abi
hostent
ignore-value
ignore-value-tests
include_next
inet_ntop
inet_ntop-tests
inet_pton
inet_pton-tests
intprops
intprops-tests
inttypes
inttypes-incomplete
inttypes-tests
ioctl
ioctl-tests
isatty
isatty-tests
isblank
isblank-tests
isnand-nolibm
isnand-nolibm-tests
isnanf-nolibm
isnanf-nolibm-tests
isnanl-nolibm
isnanl-nolibm-tests
langinfo
langinfo-tests
largefile
ldexp
ldexp-tests
limits-h
limits-h-tests
listen
listen-tests
localcharset
localcharset-tests
locale
locale-tests
localeconv
localeconv-tests
localename
localename-tests
localtime-buffer
lock
lseek
lseek-tests
lstat
lstat-tests
maintainer-makefile
malloc-posix
malloca
malloca-tests
manywarnings
math
math-tests
mbrtowc
mbrtowc-tests
mbsinit
mbsinit-tests
mbsrtowcs
mbsrtowcs-tests
mbtowc
memchr
memchr-tests
mgetgroups
mkdtemp
mkostemp
mkostemps
mktempd
mktime
mktime-internal
msvc-inval
msvc-nothrow
multiarch
nanosleep
nanosleep-tests
net_if
net_if-tests
netdb
netdb-tests
netinet_in
netinet_in-tests
nl_langinfo
nl_langinfo-tests
nocrash
nonblocking
nonblocking-pipe-tests
nonblocking-socket-tests
nonblocking-tests
open
open-tests
openpty
openpty-tests
passfd
passfd-tests
pathmax
pathmax-tests
perror
perror-tests
physmem
pipe-posix
pipe-posix-tests
pipe2
pipe2-tests
poll
poll-h
poll-h-tests
poll-tests
posix-shell
posix_openpt
posix_openpt-tests
posix_spawn-internal
posix_spawn_file_actions_addclose
posix_spawn_file_actions_addclose-tests
posix_spawn_file_actions_adddup2
posix_spawn_file_actions_adddup2-tests
posix_spawn_file_actions_addopen
posix_spawn_file_actions_addopen-tests
posix_spawn_file_actions_destroy
posix_spawn_file_actions_init
posix_spawnattr_destroy
posix_spawnattr_init
posix_spawnattr_setflags
posix_spawnattr_setsigmask
posix_spawnp
posix_spawnp-tests
pthread
pthread_sigmask
pthread_sigmask-tests
ptsname
ptsname-tests
ptsname_r
ptsname_r-tests
pty
pty-tests
putenv
raise
raise-tests
rawmemchr
rawmemchr-tests
read
read-tests
readlink
readlink-tests
realloc-posix
recv
recv-tests
regex
regex-tests
same-inode
sched
sched-tests
secure_getenv
select
select-tests
send
send-tests
servent
setenv
setenv-tests
setlocale
setlocale-tests
setsockopt
setsockopt-tests
sigaction
sigaction-tests
signal-h
signal-h-tests
signbit
signbit-tests
sigpipe
sigpipe-tests
sigprocmask
sigprocmask-tests
size_max
sleep
sleep-tests
snippet/_Noreturn
snippet/arg-nonnull
snippet/c++defs
snippet/unused-parameter
snippet/warn-on-use
snprintf
snprintf-tests
socket
socketlib
sockets
sockets-tests
socklen
spawn
spawn-tests
ssize_t
stat
stat-tests
stat-time
stat-time-tests
stdalign
stdalign-tests
stdarg
stdbool
stdbool-tests
stddef
stddef-tests
stdint
stdint-tests
stdio
stdio-tests
stdlib
stdlib-tests
stpcpy
strcase
strchrnul
strchrnul-tests
strdup-posix
streq
strerror
strerror-override
strerror-tests
strerror_r-posix
strerror_r-posix-tests
string
string-tests
strings
strings-tests
strndup
strnlen
strnlen-tests
strnlen1
strptime
strsep
strtok_r
symlink
symlink-tests
sys_ioctl
sys_ioctl-tests
sys_select
sys_select-tests
sys_socket
sys_socket-tests
sys_stat
sys_stat-tests
sys_time
sys_time-tests
sys_types
sys_types-tests
sys_uio
sys_uio-tests
sys_utsname
sys_utsname-tests
sys_wait
sys_wait-tests
tempname
termios
termios-tests
test-framework-sh
test-framework-sh-tests
thread
thread-tests
threadlib
time
time-tests
time_r
timegm
ttyname_r
ttyname_r-tests
uname
uname-tests
unistd
unistd-tests
unitypes
uniwidth/base
uniwidth/width
uniwidth/width-tests
unlockpt
unlockpt-tests
unsetenv
unsetenv-tests
useless-if-before-free
usleep
usleep-tests
vasnprintf
vasnprintf-tests
vasprintf
vasprintf-tests
vc-list-files
vc-list-files-tests
verify
verify-tests
vsnprintf
vsnprintf-tests
wait-process
waitpid
warnings
wchar
wchar-tests
wcrtomb
wcrtomb-tests
wctob
wctomb
wctype-h
wctype-h-tests
wcwidth
wcwidth-tests
write
write-tests
xalloc
xalloc-die
xalloc-die-tests
xalloc-oversized
xsize
Notice from module vasprintf:
If you are using GNU gettext version 0.16.1 or older, add the following options
to XGETTEXT_OPTIONS in your po/Makevars:
--flag=asprintf:2:c-format --flag=vasprintf:2:c-format
File list:
build-aux/config.rpath
build-aux/gitlog-to-changelog
build-aux/mktempd
build-aux/useless-if-before-free
build-aux/vc-list-files
lib/_Noreturn.h
lib/accept.c
lib/alloca.c
lib/alloca.in.h
lib/allocator.c
lib/allocator.h
lib/areadlink.c
lib/areadlink.h
lib/arg-nonnull.h
lib/arpa_inet.in.h
lib/asnprintf.c
lib/asprintf.c
lib/assure.h
lib/base64.c
lib/base64.h
lib/basename-lgpl.c
lib/binary-io.c
lib/binary-io.h
lib/bind.c
lib/bitrotate.c
lib/bitrotate.h
lib/btowc.c
lib/byteswap.in.h
lib/c++defs.h
lib/c-ctype.c
lib/c-ctype.h
lib/c-strcase.h
lib/c-strcasecmp.c
lib/c-strcasestr.c
lib/c-strcasestr.h
lib/c-strncasecmp.c
lib/calloc.c
lib/canonicalize-lgpl.c
lib/careadlinkat.c
lib/careadlinkat.h
lib/chown.c
lib/cloexec.c
lib/cloexec.h
lib/close.c
lib/connect.c
lib/count-leading-zeros.c
lib/count-leading-zeros.h
lib/count-one-bits.c
lib/count-one-bits.h
lib/dirname-lgpl.c
lib/dirname.h
lib/dosname.h
lib/dup2.c
lib/errno.in.h
lib/execinfo.c
lib/execinfo.in.h
lib/fchown-stub.c
lib/fclose.c
lib/fcntl.c
lib/fcntl.in.h
lib/fd-hook.c
lib/fd-hook.h
lib/fdatasync.c
lib/fflush.c
lib/ffs.c
lib/ffsl.c
lib/ffsl.h
lib/filename.h
lib/flexmember.h
lib/float+.h
lib/float.c
lib/float.in.h
lib/fnmatch.c
lib/fnmatch.in.h
lib/fnmatch_loop.c
lib/fpurge.c
lib/freading.c
lib/freading.h
lib/fseek.c
lib/fseeko.c
lib/fstat.c
lib/fsync.c
lib/ftell.c
lib/ftello.c
lib/gai_strerror.c
lib/getaddrinfo.c
lib/getcwd-lgpl.c
lib/getdelim.c
lib/getdtablesize.c
lib/getgroups.c
lib/gethostname.c
lib/getline.c
lib/getopt-cdefs.in.h
lib/getopt-core.h
lib/getopt-ext.h
lib/getopt-pfx-core.h
lib/getopt-pfx-ext.h
lib/getopt.c
lib/getopt.in.h
lib/getopt1.c
lib/getopt_int.h
lib/getpass.c
lib/getpass.h
lib/getpeername.c
lib/getsockname.c
lib/gettext.h
lib/gettimeofday.c
lib/getugroups.c
lib/getugroups.h
lib/glthread/lock.c
lib/glthread/lock.h
lib/glthread/threadlib.c
lib/hard-locale.c
lib/hard-locale.h
lib/ignore-value.h
lib/inet_ntop.c
lib/inet_pton.c
lib/intprops.h
lib/ioctl.c
lib/isatty.c
lib/itold.c
lib/langinfo.in.h
lib/limits.in.h
lib/listen.c
lib/localcharset.c
lib/localcharset.h
lib/locale.in.h
lib/localeconv.c
lib/localtime-buffer.c
lib/localtime-buffer.h
lib/lseek.c
lib/lstat.c
lib/malloc.c
lib/malloca.c
lib/malloca.h
lib/mbrtowc.c
lib/mbsinit.c
lib/mbsrtowcs-impl.h
lib/mbsrtowcs-state.c
lib/mbsrtowcs.c
lib/mbtowc-impl.h
lib/mbtowc.c
lib/memchr.c
lib/memchr.valgrind
lib/mgetgroups.c
lib/mgetgroups.h
lib/mkdtemp.c
lib/mkostemp.c
lib/mkostemps.c
lib/mktime-internal.h
lib/mktime.c
lib/msvc-inval.c
lib/msvc-inval.h
lib/msvc-nothrow.c
lib/msvc-nothrow.h
lib/net_if.in.h
lib/netdb.in.h
lib/netinet_in.in.h
lib/nl_langinfo.c
lib/nonblocking.c
lib/nonblocking.h
lib/open.c
lib/openpty.c
lib/passfd.c
lib/passfd.h
lib/pathmax.h
lib/perror.c
lib/physmem.c
lib/physmem.h
lib/pipe.c
lib/pipe2.c
lib/poll.c
lib/poll.in.h
lib/posix_openpt.c
lib/printf-args.c
lib/printf-args.h
lib/printf-parse.c
lib/printf-parse.h
lib/pthread.c
lib/pthread.in.h
lib/pthread_sigmask.c
lib/pty.in.h
lib/raise.c
lib/rawmemchr.c
lib/rawmemchr.valgrind
lib/readlink.c
lib/realloc.c
lib/recv.c
lib/regcomp.c
lib/regex.c
lib/regex.h
lib/regex_internal.c
lib/regex_internal.h
lib/regexec.c
lib/sched.in.h
lib/secure_getenv.c
lib/select.c
lib/send.c
lib/setenv.c
lib/setsockopt.c
lib/sig-handler.c
lib/sig-handler.h
lib/sigaction.c
lib/signal.in.h
lib/sigprocmask.c
lib/size_max.h
lib/sleep.c
lib/snprintf.c
lib/socket.c
lib/sockets.c
lib/sockets.h
lib/stat-time.c
lib/stat-time.h
lib/stat-w32.c
lib/stat-w32.h
lib/stat.c
lib/stdalign.in.h
lib/stdarg.in.h
lib/stdbool.in.h
lib/stddef.in.h
lib/stdint.in.h
lib/stdio-impl.h
lib/stdio-read.c
lib/stdio-write.c
lib/stdio.in.h
lib/stdlib.in.h
lib/stpcpy.c
lib/str-two-way.h
lib/strcasecmp.c
lib/strchrnul.c
lib/strchrnul.valgrind
lib/strdup.c
lib/streq.h
lib/strerror-override.c
lib/strerror-override.h
lib/strerror.c
lib/strerror_r.c
lib/string.in.h
lib/strings.in.h
lib/stripslash.c
lib/strncasecmp.c
lib/strndup.c
lib/strnlen.c
lib/strnlen1.c
lib/strnlen1.h
lib/strptime.c
lib/strsep.c
lib/strtok_r.c
lib/sys_ioctl.in.h
lib/sys_select.in.h
lib/sys_socket.c
lib/sys_socket.in.h
lib/sys_stat.in.h
lib/sys_time.in.h
lib/sys_types.in.h
lib/sys_uio.in.h
lib/sys_utsname.in.h
lib/sys_wait.in.h
lib/tempname.c
lib/tempname.h
lib/termios.in.h
lib/time.in.h
lib/time_r.c
lib/timegm.c
lib/ttyname_r.c
lib/uname.c
lib/unistd.c
lib/unistd.in.h
lib/unitypes.in.h
lib/uniwidth.in.h
lib/uniwidth/cjk.h
lib/uniwidth/width.c
lib/unsetenv.c
lib/unused-parameter.h
lib/usleep.c
lib/vasnprintf.c
lib/vasnprintf.h
lib/vasprintf.c
lib/verify.h
lib/vsnprintf.c
lib/w32sock.h
lib/waitpid.c
lib/warn-on-use.h
lib/wchar.in.h
lib/wcrtomb.c
lib/wctype-h.c
lib/wctype.in.h
lib/wcwidth.c
lib/xalloc-oversized.h
lib/xsize.c
lib/xsize.h
m4/00gnulib.m4
m4/absolute-header.m4
m4/alloca.m4
m4/arpa_inet_h.m4
m4/asm-underscore.m4
m4/autobuild.m4
m4/base64.m4
m4/btowc.m4
m4/builtin-expect.m4
m4/byteswap.m4
m4/calloc.m4
m4/canonicalize.m4
m4/chown.m4
m4/clock_time.m4
m4/close.m4
m4/codeset.m4
m4/configmake.m4
m4/count-leading-zeros.m4
m4/count-one-bits.m4
m4/ctype.m4
m4/dirname.m4
m4/double-slash-root.m4
m4/dup.m4
m4/dup2.m4
m4/eealloc.m4
m4/environ.m4
m4/errno_h.m4
m4/error.m4
m4/execinfo.m4
m4/exponentd.m4
m4/exponentf.m4
m4/exponentl.m4
m4/extensions.m4
m4/extern-inline.m4
m4/fatal-signal.m4
m4/fclose.m4
m4/fcntl-o.m4
m4/fcntl.m4
m4/fcntl_h.m4
m4/fdatasync.m4
m4/fdopen.m4
m4/fflush.m4
m4/ffs.m4
m4/ffsl.m4
m4/flexmember.m4
m4/float_h.m4
m4/fnmatch.m4
m4/fpieee.m4
m4/fpurge.m4
m4/freading.m4
m4/fseek.m4
m4/fseeko.m4
m4/fstat.m4
m4/fsync.m4
m4/ftell.m4
m4/ftello.m4
m4/ftruncate.m4
m4/func.m4
m4/getaddrinfo.m4
m4/getcwd.m4
m4/getdelim.m4
m4/getdtablesize.m4
m4/getgroups.m4
m4/gethostname.m4
m4/getline.m4
m4/getopt.m4
m4/getpagesize.m4
m4/getpass.m4
m4/getprogname.m4
m4/gettimeofday.m4
m4/getugroups.m4
m4/glibc21.m4
m4/gnulib-common.m4
m4/grantpt.m4
m4/host-cpu-c-abi.m4
m4/hostent.m4
m4/include_next.m4
m4/inet_ntop.m4
m4/inet_pton.m4
m4/intlmacosx.m4
m4/intmax_t.m4
m4/inttypes-pri.m4
m4/inttypes.m4
m4/inttypes_h.m4
m4/ioctl.m4
m4/isatty.m4
m4/isblank.m4
m4/isnand.m4
m4/isnanf.m4
m4/isnanl.m4
m4/langinfo_h.m4
m4/largefile.m4
m4/lcmessage.m4
m4/ldexp.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/libunistring-base.m4
m4/limits-h.m4
m4/localcharset.m4
m4/locale-fr.m4
m4/locale-ja.m4
m4/locale-tr.m4
m4/locale-zh.m4
m4/locale_h.m4
m4/localeconv.m4
m4/localename.m4
m4/localtime-buffer.m4
m4/lock.m4
m4/longlong.m4
m4/lseek.m4
m4/lstat.m4
m4/malloc.m4
m4/malloca.m4
m4/manywarnings-c++.m4
m4/manywarnings.m4
m4/math_h.m4
m4/mbrtowc.m4
m4/mbsinit.m4
m4/mbsrtowcs.m4
m4/mbstate_t.m4
m4/mbtowc.m4
m4/memchr.m4
m4/mgetgroups.m4
m4/mkdtemp.m4
m4/mkostemp.m4
m4/mkostemps.m4
m4/mktime.m4
m4/mmap-anon.m4
m4/mode_t.m4
m4/msvc-inval.m4
m4/msvc-nothrow.m4
m4/multiarch.m4
m4/nanosleep.m4
m4/net_if_h.m4
m4/netdb_h.m4
m4/netinet_in_h.m4
m4/nl_langinfo.m4
m4/nocrash.m4
m4/nonblocking.m4
m4/off_t.m4
m4/onceonly.m4
m4/open-cloexec.m4
m4/open.m4
m4/passfd.m4
m4/pathmax.m4
m4/perror.m4
m4/physmem.m4
m4/pipe.m4
m4/pipe2.m4
m4/poll.m4
m4/poll_h.m4
m4/posix-shell.m4
m4/posix_openpt.m4
m4/posix_spawn.m4
m4/printf.m4
m4/pthread.m4
m4/pthread_rwlock_rdlock.m4
m4/pthread_sigmask.m4
m4/ptsname.m4
m4/ptsname_r.m4
m4/pty.m4
m4/pty_h.m4
m4/putenv.m4
m4/raise.m4
m4/rawmemchr.m4
m4/read.m4
m4/readlink.m4
m4/realloc.m4
m4/regex.m4
m4/sched_h.m4
m4/secure_getenv.m4
m4/select.m4
m4/servent.m4
m4/setenv.m4
m4/setlocale.m4
m4/sig_atomic_t.m4
m4/sigaction.m4
m4/signal_h.m4
m4/signalblocking.m4
m4/signbit.m4
m4/sigpipe.m4
m4/size_max.m4
m4/sleep.m4
m4/snprintf.m4
m4/socketlib.m4
m4/sockets.m4
m4/socklen.m4
m4/sockpfaf.m4
m4/spawn_h.m4
m4/ssize_t.m4
m4/stat-time.m4
m4/stat.m4
m4/stdalign.m4
m4/stdarg.m4
m4/stdbool.m4
m4/stddef_h.m4
m4/stdint.m4
m4/stdint_h.m4
m4/stdio_h.m4
m4/stdlib_h.m4
m4/stpcpy.m4
m4/strcase.m4
m4/strchrnul.m4
m4/strdup.m4
m4/strerror.m4
m4/strerror_r.m4
m4/string_h.m4
m4/strings_h.m4
m4/strndup.m4
m4/strnlen.m4
m4/strptime.m4
m4/strsep.m4
m4/strtok_r.m4
m4/symlink.m4
m4/sys_ioctl_h.m4
m4/sys_select_h.m4
m4/sys_socket_h.m4
m4/sys_stat_h.m4
m4/sys_time_h.m4
m4/sys_types_h.m4
m4/sys_uio_h.m4
m4/sys_utsname_h.m4
m4/sys_wait_h.m4
m4/tempname.m4
m4/termios_h.m4
m4/thread.m4
m4/threadlib.m4
m4/time_h.m4
m4/time_r.m4
m4/timegm.m4
m4/tm_gmtoff.m4
m4/ttyname_r.m4
m4/uname.m4
m4/ungetc.m4
m4/unistd_h.m4
m4/unlockpt.m4
m4/usleep.m4
m4/vasnprintf.m4
m4/vasprintf.m4
m4/vsnprintf.m4
m4/wait-process.m4
m4/waitpid.m4
m4/warn-on-use.m4
m4/warnings.m4
m4/wchar_h.m4
m4/wchar_t.m4
m4/wcrtomb.m4
m4/wctob.m4
m4/wctomb.m4
m4/wctype_h.m4
m4/wcwidth.m4
m4/wint_t.m4
m4/write.m4
m4/xalloc.m4
m4/xsize.m4
tests/infinity.h
tests/init.sh
tests/macros.h
tests/minus-zero.h
tests/nan.h
tests/nap.h
tests/null-ptr.h
tests/randomd.c
tests/signature.h
tests/socket-client.h
tests/socket-server.h
tests/test-accept.c
tests/test-alloca-opt.c
tests/test-areadlink.c
tests/test-areadlink.h
tests/test-arpa_inet.c
tests/test-base64.c
tests/test-binary-io.c
tests/test-binary-io.sh
tests/test-bind.c
tests/test-bitrotate.c
tests/test-btowc.c
tests/test-btowc1.sh
tests/test-btowc2.sh
tests/test-byteswap.c
tests/test-c-ctype.c
tests/test-c-strcase.sh
tests/test-c-strcasecmp.c
tests/test-c-strcasestr.c
tests/test-c-strncasecmp.c
tests/test-canonicalize-lgpl.c
tests/test-chown.c
tests/test-chown.h
tests/test-cloexec.c
tests/test-close.c
tests/test-connect.c
tests/test-count-leading-zeros.c
tests/test-count-one-bits.c
tests/test-ctype.c
tests/test-dup.c
tests/test-dup2.c
tests/test-environ.c
tests/test-errno.c
tests/test-fclose.c
tests/test-fcntl-h.c
tests/test-fcntl.c
tests/test-fdatasync.c
tests/test-fdopen.c
tests/test-fflush.c
tests/test-fflush2.c
tests/test-fflush2.sh
tests/test-ffs.c
tests/test-ffsl.c
tests/test-fgetc.c
tests/test-float.c
tests/test-fnmatch.c
tests/test-fpurge.c
tests/test-fputc.c
tests/test-fread.c
tests/test-freading.c
tests/test-fseek.c
tests/test-fseek.sh
tests/test-fseek2.sh
tests/test-fseeko.c
tests/test-fseeko.sh
tests/test-fseeko2.sh
tests/test-fseeko3.c
tests/test-fseeko3.sh
tests/test-fseeko4.c
tests/test-fseeko4.sh
tests/test-fstat.c
tests/test-fsync.c
tests/test-ftell.c
tests/test-ftell.sh
tests/test-ftell2.sh
tests/test-ftell3.c
tests/test-ftello.c
tests/test-ftello.sh
tests/test-ftello2.sh
tests/test-ftello3.c
tests/test-ftello4.c
tests/test-ftello4.sh
tests/test-ftruncate.c
tests/test-ftruncate.sh
tests/test-func.c
tests/test-fwrite.c
tests/test-getaddrinfo.c
tests/test-getcwd-lgpl.c
tests/test-getdelim.c
tests/test-getdtablesize.c
tests/test-getgroups.c
tests/test-gethostname.c
tests/test-getline.c
tests/test-getopt-main.h
tests/test-getopt-posix.c
tests/test-getopt.h
tests/test-getpeername.c
tests/test-getprogname.c
tests/test-getsockname.c
tests/test-getsockopt.c
tests/test-gettimeofday.c
tests/test-grantpt.c
tests/test-ignore-value.c
tests/test-inet_ntop.c
tests/test-inet_pton.c
tests/test-init.sh
tests/test-intprops.c
tests/test-inttypes.c
tests/test-ioctl.c
tests/test-isatty.c
tests/test-isblank.c
tests/test-isnand-nolibm.c
tests/test-isnand.h
tests/test-isnanf-nolibm.c
tests/test-isnanf.h
tests/test-isnanl-nolibm.c
tests/test-isnanl.h
tests/test-langinfo.c
tests/test-ldexp.c
tests/test-ldexp.h
tests/test-limits-h.c
tests/test-listen.c
tests/test-localcharset.c
tests/test-locale.c
tests/test-localeconv.c
tests/test-localename.c
tests/test-lseek.c
tests/test-lseek.sh
tests/test-lstat.c
tests/test-lstat.h
tests/test-malloca.c
tests/test-math.c
tests/test-mbrtowc-w32-1.sh
tests/test-mbrtowc-w32-2.sh
tests/test-mbrtowc-w32-3.sh
tests/test-mbrtowc-w32-4.sh
tests/test-mbrtowc-w32-5.sh
tests/test-mbrtowc-w32.c
tests/test-mbrtowc.c
tests/test-mbrtowc1.sh
tests/test-mbrtowc2.sh
tests/test-mbrtowc3.sh
tests/test-mbrtowc4.sh
tests/test-mbrtowc5.sh
tests/test-mbsinit.c
tests/test-mbsinit.sh
tests/test-mbsrtowcs.c
tests/test-mbsrtowcs1.sh
tests/test-mbsrtowcs2.sh
tests/test-mbsrtowcs3.sh
tests/test-mbsrtowcs4.sh
tests/test-memchr.c
tests/test-nanosleep.c
tests/test-net_if.c
tests/test-netdb.c
tests/test-netinet_in.c
tests/test-nl_langinfo.c
tests/test-nl_langinfo.sh
tests/test-nonblocking-misc.h
tests/test-nonblocking-pipe-child.c
tests/test-nonblocking-pipe-main.c
tests/test-nonblocking-pipe.h
tests/test-nonblocking-pipe.sh
tests/test-nonblocking-reader.h
tests/test-nonblocking-socket-child.c
tests/test-nonblocking-socket-main.c
tests/test-nonblocking-socket.h
tests/test-nonblocking-socket.sh
tests/test-nonblocking-writer.h
tests/test-nonblocking.c
tests/test-open.c
tests/test-open.h
tests/test-openpty.c
tests/test-passfd.c
tests/test-pathmax.c
tests/test-perror.c
tests/test-perror.sh
tests/test-perror2.c
tests/test-pipe.c
tests/test-pipe2.c
tests/test-poll-h.c
tests/test-poll.c
tests/test-posix_openpt.c
tests/test-posix_spawn1.c
tests/test-posix_spawn1.in.sh
tests/test-posix_spawn2.c
tests/test-posix_spawn2.in.sh
tests/test-posix_spawn_file_actions_addclose.c
tests/test-posix_spawn_file_actions_adddup2.c
tests/test-posix_spawn_file_actions_addopen.c
tests/test-pthread_sigmask1.c
tests/test-pthread_sigmask2.c
tests/test-ptsname.c
tests/test-ptsname_r.c
tests/test-raise.c
tests/test-rawmemchr.c
tests/test-read.c
tests/test-readlink.c
tests/test-readlink.h
tests/test-recv.c
tests/test-regex.c
tests/test-sched.c
tests/test-select-fd.c
tests/test-select-in.sh
tests/test-select-out.sh
tests/test-select-stdin.c
tests/test-select.c
tests/test-select.h
tests/test-send.c
tests/test-setenv.c
tests/test-setlocale1.c
tests/test-setlocale1.sh
tests/test-setlocale2.c
tests/test-setlocale2.sh
tests/test-setsockopt.c
tests/test-sigaction.c
tests/test-signal-h.c
tests/test-signbit.c
tests/test-sigpipe.c
tests/test-sigpipe.sh
tests/test-sigprocmask.c
tests/test-sleep.c
tests/test-snprintf.c
tests/test-sockets.c
tests/test-spawn.c
tests/test-stat-time.c
tests/test-stat.c
tests/test-stat.h
tests/test-stdalign.c
tests/test-stdbool.c
tests/test-stddef.c
tests/test-stdint.c
tests/test-stdio.c
tests/test-stdlib.c
tests/test-strchrnul.c
tests/test-strerror.c
tests/test-strerror_r.c
tests/test-string.c
tests/test-strings.c
tests/test-strnlen.c
tests/test-symlink.c
tests/test-symlink.h
tests/test-sys_ioctl.c
tests/test-sys_select.c
tests/test-sys_socket.c
tests/test-sys_stat.c
tests/test-sys_time.c
tests/test-sys_types.c
tests/test-sys_uio.c
tests/test-sys_utsname.c
tests/test-sys_wait.c
tests/test-sys_wait.h
tests/test-termios.c
tests/test-thread_create.c
tests/test-thread_self.c
tests/test-time.c
tests/test-ttyname_r.c
tests/test-uname.c
tests/test-unistd.c
tests/test-unlockpt.c
tests/test-unsetenv.c
tests/test-usleep.c
tests/test-vasnprintf.c
tests/test-vasprintf.c
tests/test-vc-list-files-cvs.sh
tests/test-vc-list-files-git.sh
tests/test-verify-try.c
tests/test-verify.c
tests/test-verify.sh
tests/test-vsnprintf.c
tests/test-wchar.c
tests/test-wcrtomb-w32-1.sh
tests/test-wcrtomb-w32-2.sh
tests/test-wcrtomb-w32-3.sh
tests/test-wcrtomb-w32-4.sh
tests/test-wcrtomb-w32-5.sh
tests/test-wcrtomb-w32.c
tests/test-wcrtomb.c
tests/test-wcrtomb.sh
tests/test-wctype-h.c
tests/test-wcwidth.c
tests/test-write.c
tests/test-xalloc-die.c
tests/test-xalloc-die.sh
tests/uniwidth/test-uc_width.c
tests/uniwidth/test-uc_width2.c
tests/uniwidth/test-uc_width2.sh
tests/zerosize-ptr.h
lib/_Noreturn.h -> tests/_Noreturn.h
lib/arg-nonnull.h -> tests/arg-nonnull.h
lib/c++defs.h -> tests/c++defs.h
lib/ctype.in.h -> tests/ctype.in.h
lib/dup.c -> tests/dup.c
lib/error.c -> tests/error.c
lib/error.h -> tests/error.h
lib/exitfail.c -> tests/exitfail.c
lib/exitfail.h -> tests/exitfail.h
lib/fatal-signal.c -> tests/fatal-signal.c
lib/fatal-signal.h -> tests/fatal-signal.h
lib/fdopen.c -> tests/fdopen.c
lib/float+.h -> tests/float+.h
lib/fpucw.h -> tests/fpucw.h
lib/ftruncate.c -> tests/ftruncate.c
lib/getpagesize.c -> tests/getpagesize.c
lib/getprogname.c -> tests/getprogname.c
lib/getprogname.h -> tests/getprogname.h
lib/getsockopt.c -> tests/getsockopt.c
lib/glthread/thread.c -> tests/glthread/thread.c
lib/glthread/thread.h -> tests/glthread/thread.h
lib/grantpt.c -> tests/grantpt.c
lib/inttypes.in.h -> tests/inttypes.in.h
lib/isblank.c -> tests/isblank.c
lib/isnan.c -> tests/isnan.c
lib/isnand-nolibm.h -> tests/isnand-nolibm.h
lib/isnand.c -> tests/isnand.c
lib/isnanf-nolibm.h -> tests/isnanf-nolibm.h
lib/isnanf.c -> tests/isnanf.c
lib/isnanl-nolibm.h -> tests/isnanl-nolibm.h
lib/isnanl.c -> tests/isnanl.c
lib/localename.c -> tests/localename.c
lib/localename.h -> tests/localename.h
lib/math.c -> tests/math.c
lib/math.in.h -> tests/math.in.h
lib/nanosleep.c -> tests/nanosleep.c
lib/ptsname.c -> tests/ptsname.c
lib/ptsname_r.c -> tests/ptsname_r.c
lib/pty-private.h -> tests/pty-private.h
lib/putenv.c -> tests/putenv.c
lib/read.c -> tests/read.c
lib/same-inode.h -> tests/same-inode.h
lib/setlocale.c -> tests/setlocale.c
lib/signbitd.c -> tests/signbitd.c
lib/signbitf.c -> tests/signbitf.c
lib/signbitl.c -> tests/signbitl.c
lib/spawn.in.h -> tests/spawn.in.h
lib/spawn_faction_addclose.c -> tests/spawn_faction_addclose.c
lib/spawn_faction_adddup2.c -> tests/spawn_faction_adddup2.c
lib/spawn_faction_addopen.c -> tests/spawn_faction_addopen.c
lib/spawn_faction_destroy.c -> tests/spawn_faction_destroy.c
lib/spawn_faction_init.c -> tests/spawn_faction_init.c
lib/spawn_int.h -> tests/spawn_int.h
lib/spawnattr_destroy.c -> tests/spawnattr_destroy.c
lib/spawnattr_init.c -> tests/spawnattr_init.c
lib/spawnattr_setflags.c -> tests/spawnattr_setflags.c
lib/spawnattr_setsigmask.c -> tests/spawnattr_setsigmask.c
lib/spawni.c -> tests/spawni.c
lib/spawnp.c -> tests/spawnp.c
lib/symlink.c -> tests/symlink.c
lib/unlockpt.c -> tests/unlockpt.c
lib/unused-parameter.h -> tests/unused-parameter.h
lib/w32sock.h -> tests/w32sock.h
lib/wait-process.c -> tests/wait-process.c
lib/wait-process.h -> tests/wait-process.h
lib/warn-on-use.h -> tests/warn-on-use.h
lib/wctob.c -> tests/wctob.c
lib/wctomb-impl.h -> tests/wctomb-impl.h
lib/wctomb.c -> tests/wctomb.c
lib/write.c -> tests/write.c
lib/xalloc-die.c -> tests/xalloc-die.c
lib/xalloc.h -> tests/xalloc.h
lib/xmalloc.c -> tests/xmalloc.c
top/GNUmakefile
top/maint.mk
Creating directory ./gnulib/lib/glthread
Creating directory ./gnulib/lib/uniwidth
Creating directory ./gnulib/tests/glthread
Creating directory ./gnulib/tests/uniwidth
Copying file GNUmakefile
Copying file build-aux/config.rpath
Copying file build-aux/gitlog-to-changelog
Copying file build-aux/mktempd
Copying file build-aux/useless-if-before-free
Copying file build-aux/vc-list-files
Copying file gnulib/lib/_Noreturn.h
Copying file gnulib/lib/accept.c
Copying file gnulib/lib/alloca.c
Copying file gnulib/lib/alloca.in.h
Copying file gnulib/lib/allocator.c
Copying file gnulib/lib/allocator.h
Copying file gnulib/lib/areadlink.c
Copying file gnulib/lib/areadlink.h
Copying file gnulib/lib/arg-nonnull.h
Copying file gnulib/lib/arpa_inet.in.h
Copying file gnulib/lib/asnprintf.c
Copying file gnulib/lib/asprintf.c
Copying file gnulib/lib/assure.h
Copying file gnulib/lib/base64.c
Copying file gnulib/lib/base64.h
Copying file gnulib/lib/basename-lgpl.c
Copying file gnulib/lib/binary-io.c
Copying file gnulib/lib/binary-io.h
Copying file gnulib/lib/bind.c
Copying file gnulib/lib/bitrotate.c
Copying file gnulib/lib/bitrotate.h
Copying file gnulib/lib/btowc.c
Copying file gnulib/lib/byteswap.in.h
Copying file gnulib/lib/c++defs.h
Copying file gnulib/lib/c-ctype.c
Copying file gnulib/lib/c-ctype.h
Copying file gnulib/lib/c-strcase.h
Copying file gnulib/lib/c-strcasecmp.c
Copying file gnulib/lib/c-strcasestr.c
Copying file gnulib/lib/c-strcasestr.h
Copying file gnulib/lib/c-strncasecmp.c
Copying file gnulib/lib/calloc.c
Copying file gnulib/lib/canonicalize-lgpl.c
Copying file gnulib/lib/careadlinkat.c
Copying file gnulib/lib/careadlinkat.h
Copying file gnulib/lib/chown.c
Copying file gnulib/lib/cloexec.c
Copying file gnulib/lib/cloexec.h
Copying file gnulib/lib/close.c
Copying file gnulib/lib/connect.c
Copying file gnulib/lib/count-leading-zeros.c
Copying file gnulib/lib/count-leading-zeros.h
Copying file gnulib/lib/count-one-bits.c
Copying file gnulib/lib/count-one-bits.h
Copying file gnulib/lib/dirname-lgpl.c
Copying file gnulib/lib/dirname.h
Copying file gnulib/lib/dosname.h
Copying file gnulib/lib/dup2.c
Copying file gnulib/lib/errno.in.h
Copying file gnulib/lib/execinfo.c
Copying file gnulib/lib/execinfo.in.h
Copying file gnulib/lib/fchown-stub.c
Copying file gnulib/lib/fclose.c
Copying file gnulib/lib/fcntl.c
Copying file gnulib/lib/fcntl.in.h
Copying file gnulib/lib/fd-hook.c
Copying file gnulib/lib/fd-hook.h
Copying file gnulib/lib/fdatasync.c
Copying file gnulib/lib/fflush.c
Copying file gnulib/lib/ffs.c
Copying file gnulib/lib/ffsl.c
Copying file gnulib/lib/ffsl.h
Copying file gnulib/lib/filename.h
Copying file gnulib/lib/flexmember.h
Copying file gnulib/lib/float+.h
Copying file gnulib/lib/float.c
Copying file gnulib/lib/float.in.h
Copying file gnulib/lib/fnmatch.c
Copying file gnulib/lib/fnmatch.in.h
Copying file gnulib/lib/fnmatch_loop.c
Copying file gnulib/lib/fpurge.c
Copying file gnulib/lib/freading.c
Copying file gnulib/lib/freading.h
Copying file gnulib/lib/fseek.c
Copying file gnulib/lib/fseeko.c
Copying file gnulib/lib/fstat.c
Copying file gnulib/lib/fsync.c
Copying file gnulib/lib/ftell.c
Copying file gnulib/lib/ftello.c
Copying file gnulib/lib/gai_strerror.c
Copying file gnulib/lib/getaddrinfo.c
Copying file gnulib/lib/getcwd-lgpl.c
Copying file gnulib/lib/getdelim.c
Copying file gnulib/lib/getdtablesize.c
Copying file gnulib/lib/getgroups.c
Copying file gnulib/lib/gethostname.c
Copying file gnulib/lib/getline.c
Copying file gnulib/lib/getopt-cdefs.in.h
Copying file gnulib/lib/getopt-core.h
Copying file gnulib/lib/getopt-ext.h
Copying file gnulib/lib/getopt-pfx-core.h
Copying file gnulib/lib/getopt-pfx-ext.h
Copying file gnulib/lib/getopt.c
Copying file gnulib/lib/getopt.in.h
Copying file gnulib/lib/getopt1.c
Copying file gnulib/lib/getopt_int.h
Copying file gnulib/lib/getpass.c
Copying file gnulib/lib/getpass.h
Copying file gnulib/lib/getpeername.c
Copying file gnulib/lib/getsockname.c
Copying file gnulib/lib/gettext.h
Copying file gnulib/lib/gettimeofday.c
Copying file gnulib/lib/getugroups.c
Copying file gnulib/lib/getugroups.h
Copying file gnulib/lib/glthread/lock.c
Copying file gnulib/lib/glthread/lock.h
Copying file gnulib/lib/glthread/threadlib.c
Copying file gnulib/lib/hard-locale.c
Copying file gnulib/lib/hard-locale.h
Copying file gnulib/lib/ignore-value.h
Copying file gnulib/lib/inet_ntop.c
Copying file gnulib/lib/inet_pton.c
Copying file gnulib/lib/intprops.h
Copying file gnulib/lib/ioctl.c
Copying file gnulib/lib/isatty.c
Copying file gnulib/lib/itold.c
Copying file gnulib/lib/langinfo.in.h
Copying file gnulib/lib/limits.in.h
Copying file gnulib/lib/listen.c
Copying file gnulib/lib/localcharset.c
Copying file gnulib/lib/localcharset.h
Copying file gnulib/lib/locale.in.h
Copying file gnulib/lib/localeconv.c
Copying file gnulib/lib/localtime-buffer.c
Copying file gnulib/lib/localtime-buffer.h
Copying file gnulib/lib/lseek.c
Copying file gnulib/lib/lstat.c
Copying file gnulib/lib/malloc.c
Copying file gnulib/lib/malloca.c
Copying file gnulib/lib/malloca.h
Copying file gnulib/lib/mbrtowc.c
Copying file gnulib/lib/mbsinit.c
Copying file gnulib/lib/mbsrtowcs-impl.h
Copying file gnulib/lib/mbsrtowcs-state.c
Copying file gnulib/lib/mbsrtowcs.c
Copying file gnulib/lib/mbtowc-impl.h
Copying file gnulib/lib/mbtowc.c
Copying file gnulib/lib/memchr.c
Copying file gnulib/lib/memchr.valgrind
Copying file gnulib/lib/mgetgroups.c
Copying file gnulib/lib/mgetgroups.h
Copying file gnulib/lib/mkdtemp.c
Copying file gnulib/lib/mkostemp.c
Copying file gnulib/lib/mkostemps.c
Copying file gnulib/lib/mktime-internal.h
Copying file gnulib/lib/mktime.c
Copying file gnulib/lib/msvc-inval.c
Copying file gnulib/lib/msvc-inval.h
Copying file gnulib/lib/msvc-nothrow.c
Copying file gnulib/lib/msvc-nothrow.h
Copying file gnulib/lib/net_if.in.h
Copying file gnulib/lib/netdb.in.h
Copying file gnulib/lib/netinet_in.in.h
Copying file gnulib/lib/nl_langinfo.c
Copying file gnulib/lib/nonblocking.c
Copying file gnulib/lib/nonblocking.h
Copying file gnulib/lib/open.c
Copying file gnulib/lib/openpty.c
Copying file gnulib/lib/passfd.c
Copying file gnulib/lib/passfd.h
Copying file gnulib/lib/pathmax.h
Copying file gnulib/lib/perror.c
Copying file gnulib/lib/physmem.c
Copying file gnulib/lib/physmem.h
Copying file gnulib/lib/pipe.c
Copying file gnulib/lib/pipe2.c
Copying file gnulib/lib/poll.c
Copying file gnulib/lib/poll.in.h
Copying file gnulib/lib/posix_openpt.c
Copying file gnulib/lib/printf-args.c
Copying file gnulib/lib/printf-args.h
Copying file gnulib/lib/printf-parse.c
Copying file gnulib/lib/printf-parse.h
Copying file gnulib/lib/pthread.c
Copying file gnulib/lib/pthread.in.h
Copying file gnulib/lib/pthread_sigmask.c
Copying file gnulib/lib/pty.in.h
Copying file gnulib/lib/raise.c
Copying file gnulib/lib/rawmemchr.c
Copying file gnulib/lib/rawmemchr.valgrind
Copying file gnulib/lib/readlink.c
Copying file gnulib/lib/realloc.c
Copying file gnulib/lib/recv.c
Copying file gnulib/lib/regcomp.c
Copying file gnulib/lib/regex.c
Copying file gnulib/lib/regex.h
Copying file gnulib/lib/regex_internal.c
Copying file gnulib/lib/regex_internal.h
Copying file gnulib/lib/regexec.c
Copying file gnulib/lib/sched.in.h
Copying file gnulib/lib/secure_getenv.c
Copying file gnulib/lib/select.c
Copying file gnulib/lib/send.c
Copying file gnulib/lib/setenv.c
Copying file gnulib/lib/setsockopt.c
Copying file gnulib/lib/sig-handler.c
Copying file gnulib/lib/sig-handler.h
Copying file gnulib/lib/sigaction.c
Copying file gnulib/lib/signal.in.h
Copying file gnulib/lib/sigprocmask.c
Copying file gnulib/lib/size_max.h
Copying file gnulib/lib/sleep.c
Copying file gnulib/lib/snprintf.c
Copying file gnulib/lib/socket.c
Copying file gnulib/lib/sockets.c
Copying file gnulib/lib/sockets.h
Copying file gnulib/lib/stat-time.c
Copying file gnulib/lib/stat-time.h
Copying file gnulib/lib/stat-w32.c
Copying file gnulib/lib/stat-w32.h
Copying file gnulib/lib/stat.c
Copying file gnulib/lib/stdalign.in.h
Copying file gnulib/lib/stdarg.in.h
Copying file gnulib/lib/stdbool.in.h
Copying file gnulib/lib/stddef.in.h
Copying file gnulib/lib/stdint.in.h
Copying file gnulib/lib/stdio-impl.h
Copying file gnulib/lib/stdio-read.c
Copying file gnulib/lib/stdio-write.c
Copying file gnulib/lib/stdio.in.h
Copying file gnulib/lib/stdlib.in.h
Copying file gnulib/lib/stpcpy.c
Copying file gnulib/lib/str-two-way.h
Copying file gnulib/lib/strcasecmp.c
Copying file gnulib/lib/strchrnul.c
Copying file gnulib/lib/strchrnul.valgrind
Copying file gnulib/lib/strdup.c
Copying file gnulib/lib/streq.h
Copying file gnulib/lib/strerror-override.c
Copying file gnulib/lib/strerror-override.h
Copying file gnulib/lib/strerror.c
Copying file gnulib/lib/strerror_r.c
Copying file gnulib/lib/string.in.h
Copying file gnulib/lib/strings.in.h
Copying file gnulib/lib/stripslash.c
Copying file gnulib/lib/strncasecmp.c
Copying file gnulib/lib/strndup.c
Copying file gnulib/lib/strnlen.c
Copying file gnulib/lib/strnlen1.c
Copying file gnulib/lib/strnlen1.h
Copying file gnulib/lib/strptime.c
Copying file gnulib/lib/strsep.c
Copying file gnulib/lib/strtok_r.c
Copying file gnulib/lib/sys_ioctl.in.h
Copying file gnulib/lib/sys_select.in.h
Copying file gnulib/lib/sys_socket.c
Copying file gnulib/lib/sys_socket.in.h
Copying file gnulib/lib/sys_stat.in.h
Copying file gnulib/lib/sys_time.in.h
Copying file gnulib/lib/sys_types.in.h
Copying file gnulib/lib/sys_uio.in.h
Copying file gnulib/lib/sys_utsname.in.h
Copying file gnulib/lib/sys_wait.in.h
Copying file gnulib/lib/tempname.c
Copying file gnulib/lib/tempname.h
Copying file gnulib/lib/termios.in.h
Copying file gnulib/lib/time.in.h
Copying file gnulib/lib/time_r.c
Copying file gnulib/lib/timegm.c
Copying file gnulib/lib/ttyname_r.c
Copying file gnulib/lib/uname.c
Copying file gnulib/lib/unistd.c
Copying file gnulib/lib/unistd.in.h
Copying file gnulib/lib/unitypes.in.h
Copying file gnulib/lib/uniwidth.in.h
Copying file gnulib/lib/uniwidth/cjk.h
Copying file gnulib/lib/uniwidth/width.c
Copying file gnulib/lib/unsetenv.c
Copying file gnulib/lib/unused-parameter.h
Copying file gnulib/lib/usleep.c
Copying file gnulib/lib/vasnprintf.c
Copying file gnulib/lib/vasnprintf.h
Copying file gnulib/lib/vasprintf.c
Copying file gnulib/lib/verify.h
Copying file gnulib/lib/vsnprintf.c
Copying file gnulib/lib/w32sock.h
Copying file gnulib/lib/waitpid.c
Copying file gnulib/lib/warn-on-use.h
Copying file gnulib/lib/wchar.in.h
Copying file gnulib/lib/wcrtomb.c
Copying file gnulib/lib/wctype-h.c
Copying file gnulib/lib/wctype.in.h
Copying file gnulib/lib/wcwidth.c
Copying file gnulib/lib/xalloc-oversized.h
Copying file gnulib/lib/xsize.c
Copying file gnulib/lib/xsize.h
Copying file gnulib/tests/_Noreturn.h
Copying file gnulib/tests/arg-nonnull.h
Copying file gnulib/tests/c++defs.h
Copying file gnulib/tests/ctype.in.h
Copying file gnulib/tests/dup.c
Copying file gnulib/tests/error.c
Copying file gnulib/tests/error.h
Copying file gnulib/tests/exitfail.c
Copying file gnulib/tests/exitfail.h
Copying file gnulib/tests/fatal-signal.c
Copying file gnulib/tests/fatal-signal.h
Copying file gnulib/tests/fdopen.c
Copying file gnulib/tests/float+.h
Copying file gnulib/tests/fpucw.h
Copying file gnulib/tests/ftruncate.c
Copying file gnulib/tests/getpagesize.c
Copying file gnulib/tests/getprogname.c
Copying file gnulib/tests/getprogname.h
Copying file gnulib/tests/getsockopt.c
Copying file gnulib/tests/glthread/thread.c
Copying file gnulib/tests/glthread/thread.h
Copying file gnulib/tests/grantpt.c
Copying file gnulib/tests/infinity.h
Copying file gnulib/tests/init.sh
Copying file gnulib/tests/inttypes.in.h
Copying file gnulib/tests/isblank.c
Copying file gnulib/tests/isnan.c
Copying file gnulib/tests/isnand-nolibm.h
Copying file gnulib/tests/isnand.c
Copying file gnulib/tests/isnanf-nolibm.h
Copying file gnulib/tests/isnanf.c
Copying file gnulib/tests/isnanl-nolibm.h
Copying file gnulib/tests/isnanl.c
Copying file gnulib/tests/localename.c
Copying file gnulib/tests/localename.h
Copying file gnulib/tests/macros.h
Copying file gnulib/tests/math.c
Copying file gnulib/tests/math.in.h
Copying file gnulib/tests/minus-zero.h
Copying file gnulib/tests/nan.h
Copying file gnulib/tests/nanosleep.c
Copying file gnulib/tests/nap.h
Copying file gnulib/tests/null-ptr.h
Copying file gnulib/tests/ptsname.c
Copying file gnulib/tests/ptsname_r.c
Copying file gnulib/tests/pty-private.h
Copying file gnulib/tests/putenv.c
Copying file gnulib/tests/randomd.c
Copying file gnulib/tests/read.c
Copying file gnulib/tests/same-inode.h
Copying file gnulib/tests/setlocale.c
Copying file gnulib/tests/signature.h
Copying file gnulib/tests/signbitd.c
Copying file gnulib/tests/signbitf.c
Copying file gnulib/tests/signbitl.c
Copying file gnulib/tests/socket-client.h
Copying file gnulib/tests/socket-server.h
Copying file gnulib/tests/spawn.in.h
Copying file gnulib/tests/spawn_faction_addclose.c
Copying file gnulib/tests/spawn_faction_adddup2.c
Copying file gnulib/tests/spawn_faction_addopen.c
Copying file gnulib/tests/spawn_faction_destroy.c
Copying file gnulib/tests/spawn_faction_init.c
Copying file gnulib/tests/spawn_int.h
Copying file gnulib/tests/spawnattr_destroy.c
Copying file gnulib/tests/spawnattr_init.c
Copying file gnulib/tests/spawnattr_setflags.c
Copying file gnulib/tests/spawnattr_setsigmask.c
Copying file gnulib/tests/spawni.c
Copying file gnulib/tests/spawnp.c
Copying file gnulib/tests/symlink.c
Copying file gnulib/tests/test-accept.c
Copying file gnulib/tests/test-alloca-opt.c
Copying file gnulib/tests/test-areadlink.c
Copying file gnulib/tests/test-areadlink.h
Copying file gnulib/tests/test-arpa_inet.c
Copying file gnulib/tests/test-base64.c
Copying file gnulib/tests/test-binary-io.c
Copying file gnulib/tests/test-binary-io.sh
Copying file gnulib/tests/test-bind.c
Copying file gnulib/tests/test-bitrotate.c
Copying file gnulib/tests/test-btowc.c
Copying file gnulib/tests/test-btowc1.sh
Copying file gnulib/tests/test-btowc2.sh
Copying file gnulib/tests/test-byteswap.c
Copying file gnulib/tests/test-c-ctype.c
Copying file gnulib/tests/test-c-strcase.sh
Copying file gnulib/tests/test-c-strcasecmp.c
Copying file gnulib/tests/test-c-strcasestr.c
Copying file gnulib/tests/test-c-strncasecmp.c
Copying file gnulib/tests/test-canonicalize-lgpl.c
Copying file gnulib/tests/test-chown.c
Copying file gnulib/tests/test-chown.h
Copying file gnulib/tests/test-cloexec.c
Copying file gnulib/tests/test-close.c
Copying file gnulib/tests/test-connect.c
Copying file gnulib/tests/test-count-leading-zeros.c
Copying file gnulib/tests/test-count-one-bits.c
Copying file gnulib/tests/test-ctype.c
Copying file gnulib/tests/test-dup.c
Copying file gnulib/tests/test-dup2.c
Copying file gnulib/tests/test-environ.c
Copying file gnulib/tests/test-errno.c
Copying file gnulib/tests/test-fclose.c
Copying file gnulib/tests/test-fcntl-h.c
Copying file gnulib/tests/test-fcntl.c
Copying file gnulib/tests/test-fdatasync.c
Copying file gnulib/tests/test-fdopen.c
Copying file gnulib/tests/test-fflush.c
Copying file gnulib/tests/test-fflush2.c
Copying file gnulib/tests/test-fflush2.sh
Copying file gnulib/tests/test-ffs.c
Copying file gnulib/tests/test-ffsl.c
Copying file gnulib/tests/test-fgetc.c
Copying file gnulib/tests/test-float.c
Copying file gnulib/tests/test-fnmatch.c
Copying file gnulib/tests/test-fpurge.c
Copying file gnulib/tests/test-fputc.c
Copying file gnulib/tests/test-fread.c
Copying file gnulib/tests/test-freading.c
Copying file gnulib/tests/test-fseek.c
Copying file gnulib/tests/test-fseek.sh
Copying file gnulib/tests/test-fseek2.sh
Copying file gnulib/tests/test-fseeko.c
Copying file gnulib/tests/test-fseeko.sh
Copying file gnulib/tests/test-fseeko2.sh
Copying file gnulib/tests/test-fseeko3.c
Copying file gnulib/tests/test-fseeko3.sh
Copying file gnulib/tests/test-fseeko4.c
Copying file gnulib/tests/test-fseeko4.sh
Copying file gnulib/tests/test-fstat.c
Copying file gnulib/tests/test-fsync.c
Copying file gnulib/tests/test-ftell.c
Copying file gnulib/tests/test-ftell.sh
Copying file gnulib/tests/test-ftell2.sh
Copying file gnulib/tests/test-ftell3.c
Copying file gnulib/tests/test-ftello.c
Copying file gnulib/tests/test-ftello.sh
Copying file gnulib/tests/test-ftello2.sh
Copying file gnulib/tests/test-ftello3.c
Copying file gnulib/tests/test-ftello4.c
Copying file gnulib/tests/test-ftello4.sh
Copying file gnulib/tests/test-ftruncate.c
Copying file gnulib/tests/test-ftruncate.sh
Copying file gnulib/tests/test-func.c
Copying file gnulib/tests/test-fwrite.c
Copying file gnulib/tests/test-getaddrinfo.c
Copying file gnulib/tests/test-getcwd-lgpl.c
Copying file gnulib/tests/test-getdelim.c
Copying file gnulib/tests/test-getdtablesize.c
Copying file gnulib/tests/test-getgroups.c
Copying file gnulib/tests/test-gethostname.c
Copying file gnulib/tests/test-getline.c
Copying file gnulib/tests/test-getopt-main.h
Copying file gnulib/tests/test-getopt-posix.c
Copying file gnulib/tests/test-getopt.h
Copying file gnulib/tests/test-getpeername.c
Copying file gnulib/tests/test-getprogname.c
Copying file gnulib/tests/test-getsockname.c
Copying file gnulib/tests/test-getsockopt.c
Copying file gnulib/tests/test-gettimeofday.c
Copying file gnulib/tests/test-grantpt.c
Copying file gnulib/tests/test-ignore-value.c
Copying file gnulib/tests/test-inet_ntop.c
Copying file gnulib/tests/test-inet_pton.c
Copying file gnulib/tests/test-init.sh
Copying file gnulib/tests/test-intprops.c
Copying file gnulib/tests/test-inttypes.c
Copying file gnulib/tests/test-ioctl.c
Copying file gnulib/tests/test-isatty.c
Copying file gnulib/tests/test-isblank.c
Copying file gnulib/tests/test-isnand-nolibm.c
Copying file gnulib/tests/test-isnand.h
Copying file gnulib/tests/test-isnanf-nolibm.c
Copying file gnulib/tests/test-isnanf.h
Copying file gnulib/tests/test-isnanl-nolibm.c
Copying file gnulib/tests/test-isnanl.h
Copying file gnulib/tests/test-langinfo.c
Copying file gnulib/tests/test-ldexp.c
Copying file gnulib/tests/test-ldexp.h
Copying file gnulib/tests/test-limits-h.c
Copying file gnulib/tests/test-listen.c
Copying file gnulib/tests/test-localcharset.c
Copying file gnulib/tests/test-locale.c
Copying file gnulib/tests/test-localeconv.c
Copying file gnulib/tests/test-localename.c
Copying file gnulib/tests/test-lseek.c
Copying file gnulib/tests/test-lseek.sh
Copying file gnulib/tests/test-lstat.c
Copying file gnulib/tests/test-lstat.h
Copying file gnulib/tests/test-malloca.c
Copying file gnulib/tests/test-math.c
Copying file gnulib/tests/test-mbrtowc-w32-1.sh
Copying file gnulib/tests/test-mbrtowc-w32-2.sh
Copying file gnulib/tests/test-mbrtowc-w32-3.sh
Copying file gnulib/tests/test-mbrtowc-w32-4.sh
Copying file gnulib/tests/test-mbrtowc-w32-5.sh
Copying file gnulib/tests/test-mbrtowc-w32.c
Copying file gnulib/tests/test-mbrtowc.c
Copying file gnulib/tests/test-mbrtowc1.sh
Copying file gnulib/tests/test-mbrtowc2.sh
Copying file gnulib/tests/test-mbrtowc3.sh
Copying file gnulib/tests/test-mbrtowc4.sh
Copying file gnulib/tests/test-mbrtowc5.sh
Copying file gnulib/tests/test-mbsinit.c
Copying file gnulib/tests/test-mbsinit.sh
Copying file gnulib/tests/test-mbsrtowcs.c
Copying file gnulib/tests/test-mbsrtowcs1.sh
Copying file gnulib/tests/test-mbsrtowcs2.sh
Copying file gnulib/tests/test-mbsrtowcs3.sh
Copying file gnulib/tests/test-mbsrtowcs4.sh
Copying file gnulib/tests/test-memchr.c
Copying file gnulib/tests/test-nanosleep.c
Copying file gnulib/tests/test-net_if.c
Copying file gnulib/tests/test-netdb.c
Copying file gnulib/tests/test-netinet_in.c
Copying file gnulib/tests/test-nl_langinfo.c
Copying file gnulib/tests/test-nl_langinfo.sh
Copying file gnulib/tests/test-nonblocking-misc.h
Copying file gnulib/tests/test-nonblocking-pipe-child.c
Copying file gnulib/tests/test-nonblocking-pipe-main.c
Copying file gnulib/tests/test-nonblocking-pipe.h
Copying file gnulib/tests/test-nonblocking-pipe.sh
Copying file gnulib/tests/test-nonblocking-reader.h
Copying file gnulib/tests/test-nonblocking-socket-child.c
Copying file gnulib/tests/test-nonblocking-socket-main.c
Copying file gnulib/tests/test-nonblocking-socket.h
Copying file gnulib/tests/test-nonblocking-socket.sh
Copying file gnulib/tests/test-nonblocking-writer.h
Copying file gnulib/tests/test-nonblocking.c
Copying file gnulib/tests/test-open.c
Copying file gnulib/tests/test-open.h
Copying file gnulib/tests/test-openpty.c
Copying file gnulib/tests/test-passfd.c
Copying file gnulib/tests/test-pathmax.c
Copying file gnulib/tests/test-perror.c
Copying file gnulib/tests/test-perror.sh
Copying file gnulib/tests/test-perror2.c
Copying file gnulib/tests/test-pipe.c
Copying file gnulib/tests/test-pipe2.c
Copying file gnulib/tests/test-poll-h.c
Copying file gnulib/tests/test-poll.c
Copying file gnulib/tests/test-posix_openpt.c
Copying file gnulib/tests/test-posix_spawn1.c
Copying file gnulib/tests/test-posix_spawn1.in.sh
Copying file gnulib/tests/test-posix_spawn2.c
Copying file gnulib/tests/test-posix_spawn2.in.sh
Copying file gnulib/tests/test-posix_spawn_file_actions_addclose.c
Copying file gnulib/tests/test-posix_spawn_file_actions_adddup2.c
Copying file gnulib/tests/test-posix_spawn_file_actions_addopen.c
Copying file gnulib/tests/test-pthread_sigmask1.c
Copying file gnulib/tests/test-pthread_sigmask2.c
Copying file gnulib/tests/test-ptsname.c
Copying file gnulib/tests/test-ptsname_r.c
Copying file gnulib/tests/test-raise.c
Copying file gnulib/tests/test-rawmemchr.c
Copying file gnulib/tests/test-read.c
Copying file gnulib/tests/test-readlink.c
Copying file gnulib/tests/test-readlink.h
Copying file gnulib/tests/test-recv.c
Copying file gnulib/tests/test-regex.c
Copying file gnulib/tests/test-sched.c
Copying file gnulib/tests/test-select-fd.c
Copying file gnulib/tests/test-select-in.sh
Copying file gnulib/tests/test-select-out.sh
Copying file gnulib/tests/test-select-stdin.c
Copying file gnulib/tests/test-select.c
Copying file gnulib/tests/test-select.h
Copying file gnulib/tests/test-send.c
Copying file gnulib/tests/test-setenv.c
Copying file gnulib/tests/test-setlocale1.c
Copying file gnulib/tests/test-setlocale1.sh
Copying file gnulib/tests/test-setlocale2.c
Copying file gnulib/tests/test-setlocale2.sh
Copying file gnulib/tests/test-setsockopt.c
Copying file gnulib/tests/test-sigaction.c
Copying file gnulib/tests/test-signal-h.c
Copying file gnulib/tests/test-signbit.c
Copying file gnulib/tests/test-sigpipe.c
Copying file gnulib/tests/test-sigpipe.sh
Copying file gnulib/tests/test-sigprocmask.c
Copying file gnulib/tests/test-sleep.c
Copying file gnulib/tests/test-snprintf.c
Copying file gnulib/tests/test-sockets.c
Copying file gnulib/tests/test-spawn.c
Copying file gnulib/tests/test-stat-time.c
Copying file gnulib/tests/test-stat.c
Copying file gnulib/tests/test-stat.h
Copying file gnulib/tests/test-stdalign.c
Copying file gnulib/tests/test-stdbool.c
Copying file gnulib/tests/test-stddef.c
Copying file gnulib/tests/test-stdint.c
Copying file gnulib/tests/test-stdio.c
Copying file gnulib/tests/test-stdlib.c
Copying file gnulib/tests/test-strchrnul.c
Copying file gnulib/tests/test-strerror.c
Copying file gnulib/tests/test-strerror_r.c
Copying file gnulib/tests/test-string.c
Copying file gnulib/tests/test-strings.c
Copying file gnulib/tests/test-strnlen.c
Copying file gnulib/tests/test-symlink.c
Copying file gnulib/tests/test-symlink.h
Copying file gnulib/tests/test-sys_ioctl.c
Copying file gnulib/tests/test-sys_select.c
Copying file gnulib/tests/test-sys_socket.c
Copying file gnulib/tests/test-sys_stat.c
Copying file gnulib/tests/test-sys_time.c
Copying file gnulib/tests/test-sys_types.c
Copying file gnulib/tests/test-sys_uio.c
Copying file gnulib/tests/test-sys_utsname.c
Copying file gnulib/tests/test-sys_wait.c
Copying file gnulib/tests/test-sys_wait.h
Copying file gnulib/tests/test-termios.c
Copying file gnulib/tests/test-thread_create.c
Copying file gnulib/tests/test-thread_self.c
Copying file gnulib/tests/test-time.c
Copying file gnulib/tests/test-ttyname_r.c
Copying file gnulib/tests/test-uname.c
Copying file gnulib/tests/test-unistd.c
Copying file gnulib/tests/test-unlockpt.c
Copying file gnulib/tests/test-unsetenv.c
Copying file gnulib/tests/test-usleep.c
Copying file gnulib/tests/test-vasnprintf.c
Copying file gnulib/tests/test-vasprintf.c
Copying file gnulib/tests/test-vc-list-files-cvs.sh
Copying file gnulib/tests/test-vc-list-files-git.sh
Copying file gnulib/tests/test-verify-try.c
Copying file gnulib/tests/test-verify.c
Copying file gnulib/tests/test-verify.sh
Copying file gnulib/tests/test-vsnprintf.c
Copying file gnulib/tests/test-wchar.c
Copying file gnulib/tests/test-wcrtomb-w32-1.sh
Copying file gnulib/tests/test-wcrtomb-w32-2.sh
Copying file gnulib/tests/test-wcrtomb-w32-3.sh
Copying file gnulib/tests/test-wcrtomb-w32-4.sh
Copying file gnulib/tests/test-wcrtomb-w32-5.sh
Copying file gnulib/tests/test-wcrtomb-w32.c
Copying file gnulib/tests/test-wcrtomb.c
Copying file gnulib/tests/test-wcrtomb.sh
Copying file gnulib/tests/test-wctype-h.c
Copying file gnulib/tests/test-wcwidth.c
Copying file gnulib/tests/test-write.c
Copying file gnulib/tests/test-xalloc-die.c
Copying file gnulib/tests/test-xalloc-die.sh
Copying file gnulib/tests/uniwidth/test-uc_width.c
Copying file gnulib/tests/uniwidth/test-uc_width2.c
Copying file gnulib/tests/uniwidth/test-uc_width2.sh
Copying file gnulib/tests/unlockpt.c
Copying file gnulib/tests/unused-parameter.h
Copying file gnulib/tests/w32sock.h
Copying file gnulib/tests/wait-process.c
Copying file gnulib/tests/wait-process.h
Copying file gnulib/tests/warn-on-use.h
Copying file gnulib/tests/wctob.c
Copying file gnulib/tests/wctomb-impl.h
Copying file gnulib/tests/wctomb.c
Copying file gnulib/tests/write.c
Copying file gnulib/tests/xalloc-die.c
Copying file gnulib/tests/xalloc.h
Copying file gnulib/tests/xmalloc.c
Copying file gnulib/tests/zerosize-ptr.h
Copying file m4/00gnulib.m4
Copying file m4/absolute-header.m4
Copying file m4/alloca.m4
Copying file m4/arpa_inet_h.m4
Copying file m4/asm-underscore.m4
Copying file m4/autobuild.m4
Copying file m4/base64.m4
Copying file m4/btowc.m4
Copying file m4/builtin-expect.m4
Copying file m4/byteswap.m4
Copying file m4/calloc.m4
Copying file m4/canonicalize.m4
Copying file m4/chown.m4
Copying file m4/clock_time.m4
Copying file m4/close.m4
Copying file m4/codeset.m4
Copying file m4/configmake.m4
Copying file m4/count-leading-zeros.m4
Copying file m4/count-one-bits.m4
Copying file m4/ctype.m4
Copying file m4/dirname.m4
Copying file m4/double-slash-root.m4
Copying file m4/dup.m4
Copying file m4/dup2.m4
Copying file m4/eealloc.m4
Copying file m4/environ.m4
Copying file m4/errno_h.m4
Copying file m4/error.m4
Copying file m4/execinfo.m4
Copying file m4/exponentd.m4
Copying file m4/exponentf.m4
Copying file m4/exponentl.m4
Copying file m4/extensions.m4
Copying file m4/extern-inline.m4
Copying file m4/fatal-signal.m4
Copying file m4/fclose.m4
Copying file m4/fcntl-o.m4
Copying file m4/fcntl.m4
Copying file m4/fcntl_h.m4
Copying file m4/fdatasync.m4
Copying file m4/fdopen.m4
Copying file m4/fflush.m4
Copying file m4/ffs.m4
Copying file m4/ffsl.m4
Copying file m4/flexmember.m4
Copying file m4/float_h.m4
Copying file m4/fnmatch.m4
Copying file m4/fpieee.m4
Copying file m4/fpurge.m4
Copying file m4/freading.m4
Copying file m4/fseek.m4
Copying file m4/fseeko.m4
Copying file m4/fstat.m4
Copying file m4/fsync.m4
Copying file m4/ftell.m4
Copying file m4/ftello.m4
Copying file m4/ftruncate.m4
Copying file m4/func.m4
Copying file m4/getaddrinfo.m4
Copying file m4/getcwd.m4
Copying file m4/getdelim.m4
Copying file m4/getdtablesize.m4
Copying file m4/getgroups.m4
Copying file m4/gethostname.m4
Copying file m4/getline.m4
Copying file m4/getopt.m4
Copying file m4/getpagesize.m4
Copying file m4/getpass.m4
Copying file m4/getprogname.m4
Copying file m4/gettimeofday.m4
Copying file m4/getugroups.m4
Copying file m4/glibc21.m4
Copying file m4/gnulib-common.m4
Copying file m4/gnulib-tool.m4
Copying file m4/grantpt.m4
Copying file m4/host-cpu-c-abi.m4
Copying file m4/hostent.m4
Copying file m4/include_next.m4
Copying file m4/inet_ntop.m4
Copying file m4/inet_pton.m4
Copying file m4/intlmacosx.m4
Copying file m4/intmax_t.m4
Copying file m4/inttypes-pri.m4
Copying file m4/inttypes.m4
Copying file m4/inttypes_h.m4
Copying file m4/ioctl.m4
Copying file m4/isatty.m4
Copying file m4/isblank.m4
Copying file m4/isnand.m4
Copying file m4/isnanf.m4
Copying file m4/isnanl.m4
Copying file m4/langinfo_h.m4
Copying file m4/largefile.m4
Copying file m4/lcmessage.m4
Copying file m4/ldexp.m4
Copying file m4/lib-ld.m4
Copying file m4/lib-link.m4
Copying file m4/lib-prefix.m4
Copying file m4/libunistring-base.m4
Copying file m4/limits-h.m4
Copying file m4/localcharset.m4
Copying file m4/locale-fr.m4
Copying file m4/locale-ja.m4
Copying file m4/locale-tr.m4
Copying file m4/locale-zh.m4
Copying file m4/locale_h.m4
Copying file m4/localeconv.m4
Copying file m4/localename.m4
Copying file m4/localtime-buffer.m4
Copying file m4/lock.m4
Copying file m4/longlong.m4
Copying file m4/lseek.m4
Copying file m4/lstat.m4
Copying file m4/malloc.m4
Copying file m4/malloca.m4
Copying file m4/manywarnings-c++.m4
Copying file m4/manywarnings.m4
Copying file m4/math_h.m4
Copying file m4/mbrtowc.m4
Copying file m4/mbsinit.m4
Copying file m4/mbsrtowcs.m4
Copying file m4/mbstate_t.m4
Copying file m4/mbtowc.m4
Copying file m4/memchr.m4
Copying file m4/mgetgroups.m4
Copying file m4/mkdtemp.m4
Copying file m4/mkostemp.m4
Copying file m4/mkostemps.m4
Copying file m4/mktime.m4
Copying file m4/mmap-anon.m4
Copying file m4/mode_t.m4
Copying file m4/msvc-inval.m4
Copying file m4/msvc-nothrow.m4
Copying file m4/multiarch.m4
Copying file m4/nanosleep.m4
Copying file m4/net_if_h.m4
Copying file m4/netdb_h.m4
Copying file m4/netinet_in_h.m4
Copying file m4/nl_langinfo.m4
Copying file m4/nocrash.m4
Copying file m4/nonblocking.m4
Copying file m4/off_t.m4
Copying file m4/onceonly.m4
Copying file m4/open-cloexec.m4
Copying file m4/open.m4
Copying file m4/passfd.m4
Copying file m4/pathmax.m4
Copying file m4/perror.m4
Copying file m4/physmem.m4
Copying file m4/pipe.m4
Copying file m4/pipe2.m4
Copying file m4/poll.m4
Copying file m4/poll_h.m4
Copying file m4/posix-shell.m4
Copying file m4/posix_openpt.m4
Copying file m4/posix_spawn.m4
Copying file m4/printf.m4
Copying file m4/pthread.m4
Copying file m4/pthread_rwlock_rdlock.m4
Copying file m4/pthread_sigmask.m4
Copying file m4/ptsname.m4
Copying file m4/ptsname_r.m4
Copying file m4/pty.m4
Copying file m4/pty_h.m4
Copying file m4/putenv.m4
Copying file m4/raise.m4
Copying file m4/rawmemchr.m4
Copying file m4/read.m4
Copying file m4/readlink.m4
Copying file m4/realloc.m4
Copying file m4/regex.m4
Copying file m4/sched_h.m4
Copying file m4/secure_getenv.m4
Copying file m4/select.m4
Copying file m4/servent.m4
Copying file m4/setenv.m4
Copying file m4/setlocale.m4
Copying file m4/sig_atomic_t.m4
Copying file m4/sigaction.m4
Copying file m4/signal_h.m4
Copying file m4/signalblocking.m4
Copying file m4/signbit.m4
Copying file m4/sigpipe.m4
Copying file m4/size_max.m4
Copying file m4/sleep.m4
Copying file m4/snprintf.m4
Copying file m4/socketlib.m4
Copying file m4/sockets.m4
Copying file m4/socklen.m4
Copying file m4/sockpfaf.m4
Copying file m4/spawn_h.m4
Copying file m4/ssize_t.m4
Copying file m4/stat-time.m4
Copying file m4/stat.m4
Copying file m4/stdalign.m4
Copying file m4/stdarg.m4
Copying file m4/stdbool.m4
Copying file m4/stddef_h.m4
Copying file m4/stdint.m4
Copying file m4/stdint_h.m4
Copying file m4/stdio_h.m4
Copying file m4/stdlib_h.m4
Copying file m4/stpcpy.m4
Copying file m4/strcase.m4
Copying file m4/strchrnul.m4
Copying file m4/strdup.m4
Copying file m4/strerror.m4
Copying file m4/strerror_r.m4
Copying file m4/string_h.m4
Copying file m4/strings_h.m4
Copying file m4/strndup.m4
Copying file m4/strnlen.m4
Copying file m4/strptime.m4
Copying file m4/strsep.m4
Copying file m4/strtok_r.m4
Copying file m4/symlink.m4
Copying file m4/sys_ioctl_h.m4
Copying file m4/sys_select_h.m4
Copying file m4/sys_socket_h.m4
Copying file m4/sys_stat_h.m4
Copying file m4/sys_time_h.m4
Copying file m4/sys_types_h.m4
Copying file m4/sys_uio_h.m4
Copying file m4/sys_utsname_h.m4
Copying file m4/sys_wait_h.m4
Copying file m4/tempname.m4
Copying file m4/termios_h.m4
Copying file m4/thread.m4
Copying file m4/threadlib.m4
Copying file m4/time_h.m4
Copying file m4/time_r.m4
Copying file m4/timegm.m4
Copying file m4/tm_gmtoff.m4
Copying file m4/ttyname_r.m4
Copying file m4/uname.m4
Copying file m4/ungetc.m4
Copying file m4/unistd_h.m4
Copying file m4/unlockpt.m4
Copying file m4/usleep.m4
Copying file m4/vasnprintf.m4
Copying file m4/vasprintf.m4
Copying file m4/vsnprintf.m4
Copying file m4/wait-process.m4
Copying file m4/waitpid.m4
Copying file m4/warn-on-use.m4
Copying file m4/warnings.m4
Copying file m4/wchar_h.m4
Copying file m4/wchar_t.m4
Copying file m4/wcrtomb.m4
Copying file m4/wctob.m4
Copying file m4/wctomb.m4
Copying file m4/wctype_h.m4
Copying file m4/wcwidth.m4
Copying file m4/wint_t.m4
Copying file m4/write.m4
Copying file m4/xalloc.m4
Copying file m4/xsize.m4
Copying file maint.mk
Creating gnulib/lib/gnulib.mk
Creating m4/gnulib-cache.m4
Creating m4/gnulib-comp.m4
Creating gnulib/tests/gnulib.mk
Updating ./build-aux/.gitignore (backup in ./build-aux/.gitignore~)
Creating ./gnulib/lib/.gitignore
Creating ./gnulib/lib/glthread/.gitignore
Creating ./gnulib/lib/uniwidth/.gitignore
Creating ./gnulib/tests/.gitignore
Creating ./gnulib/tests/glthread/.gitignore
Creating ./gnulib/tests/uniwidth/.gitignore
Updating ./m4/.gitignore (backup in ./m4/.gitignore~)
Finished.
You may need to add #include directives for the following .h files.
#include <arpa/inet.h>
#include <byteswap.h>
#include <execinfo.h>
#include <fcntl.h>
#include <fnmatch.h>
#include <locale.h>
#include <math.h>
#include <net/if.h>
#include <netdb.h>
#include <poll.h>
#include <pthread.h>
#include <pty.h>
#include <regex.h>
#include <sched.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/utsname.h>
#include <sys/wait.h>
#include <termios.h>
#include <time.h>
#include <unistd.h>
#include <wchar.h>
/* Include only after all system include files. */
#include "areadlink.h"
#include "base64.h"
#include "bitrotate.h"
#include "c-ctype.h"
#include "c-strcase.h"
#include "c-strcasestr.h"
#include "configmake.h"
#include "count-leading-zeros.h"
#include "count-one-bits.h"
#include "dirname.h"
#include "getpass.h"
#include "ignore-value.h"
#include "intprops.h"
#include "mgetgroups.h"
#include "nonblocking.h"
#include "passfd.h"
#include "physmem.h"
#include "stat-time.h"
#include "verify.h"
You may need to use the following Makefile variables when linking.
Use them in <program>_LDADD when linking a program, or
in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library.
$(GETADDRINFO_LIB)
$(GETHOSTNAME_LIB)
$(HOSTENT_LIB)
$(INET_NTOP_LIB)
$(INET_PTON_LIB)
$(LDEXP_LIBM)
$(LIBSOCKET)
$(LIB_CLOCK_GETTIME)
$(LIB_EXECINFO)
$(LIB_FDATASYNC)
$(LIB_POLL)
$(LIB_PTHREAD)
$(LIB_PTHREAD_SIGMASK)
$(LIB_SELECT)
$(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise
$(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise
$(PTY_LIB)
$(SERVENT_LIB)
Don't forget to
- "include gnulib.mk" from within "gnulib/lib/Makefile.am",
- "include gnulib.mk" from within "gnulib/tests/Makefile.am",
- mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am,
- mention "m4/gnulib-cache.m4" in EXTRA_DIST in Makefile.am,
- invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC,
- invoke gl_INIT in ./configure.ac.
running: AUTOPOINT=true LIBTOOLIZE=true autoreconf --verbose --install --force -I m4 --no-recursive
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I m4 --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: true --copy --force
autoreconf: running: /usr/bin/autoconf --include=m4 --force
autoreconf: running: /usr/bin/autoheader --include=m4 --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:116: installing 'build-aux/compile'
configure.ac:27: installing 'build-aux/missing'
Makefile.am: installing './INSTALL'
examples/Makefile.am: installing 'build-aux/depcomp'
parallel-tests: installing 'build-aux/test-driver'
autoreconf: Leaving directory `.'
./bootstrap: ln -fs ../.gnulib/build-aux/install-sh build-aux/install-sh
./bootstrap: ln -fs ../.gnulib/build-aux/depcomp build-aux/depcomp
./bootstrap: ln -fs ../.gnulib/build-aux/config.guess build-aux/config.guess
./bootstrap: ln -fs ../.gnulib/build-aux/config.sub build-aux/config.sub
./bootstrap: ln -fs .gnulib/doc/INSTALL INSTALL
./bootstrap: done. Now you can run './configure'.
I am going to run configure with no arguments - if you wish
to pass any to it, please specify them on the ./autogen.sh command line.
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking how to create a pax tar archive... gnutar
checking whether make supports nested variables... (cached) yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking whether _XOPEN_SOURCE should be defined... no
checking for Minix Amsterdam compiler... no
checking for ar... ar
checking for ranlib... ranlib
checking for _LARGEFILE_SOURCE value needed for large files... no
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for gcc option to accept ISO C99... none needed
checking for gcc option to accept ISO Standard C... (cached) none needed
configure: autobuild project... libvirt
configure: autobuild revision... v2.1.0-rc1-7172-g60c70de76c
configure: autobuild hostname... patchew-fedora
configure: autobuild timestamp... 20180828T215333Z
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking features.h usability... yes
checking features.h presence... yes
checking for features.h... yes
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking for unistd.h... (cached) yes
checking execinfo.h usability... yes
checking execinfo.h presence... yes
checking for execinfo.h... yes
checking wctype.h usability... yes
checking wctype.h presence... yes
checking for wctype.h... yes
checking for sys/stat.h... (cached) yes
checking netdb.h usability... yes
checking netdb.h presence... yes
checking for netdb.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking sys/cdefs.h usability... yes
checking sys/cdefs.h presence... yes
checking for sys/cdefs.h... yes
checking stdio_ext.h usability... yes
checking stdio_ext.h presence... yes
checking for stdio_ext.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking grp.h usability... yes
checking grp.h presence... yes
checking for grp.h... yes
checking langinfo.h usability... yes
checking langinfo.h presence... yes
checking for langinfo.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking xlocale.h usability... yes
checking xlocale.h presence... yes
checking for xlocale.h... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking pty.h usability... yes
checking pty.h presence... yes
checking for pty.h... yes
checking poll.h usability... yes
checking poll.h presence... yes
checking for poll.h... yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/filio.h usability... no
checking sys/filio.h presence... no
checking for sys/filio.h... no
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking malloc.h usability... yes
checking malloc.h presence... yes
checking for malloc.h... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking wchar.h usability... yes
checking wchar.h presence... yes
checking for wchar.h... yes
checking for stdint.h... (cached) yes
checking for strings.h... (cached) yes
checking sys/uio.h usability... yes
checking sys/uio.h presence... yes
checking for sys/uio.h... yes
checking sys/utsname.h usability... yes
checking sys/utsname.h presence... yes
checking for sys/utsname.h... yes
checking sys/wait.h usability... yes
checking sys/wait.h presence... yes
checking for sys/wait.h... yes
checking crtdefs.h usability... no
checking crtdefs.h presence... no
checking for crtdefs.h... no
checking for inttypes.h... (cached) yes
checking math.h usability... yes
checking math.h presence... yes
checking for math.h... yes
checking for sys/types.h... (cached) yes
checking spawn.h usability... yes
checking spawn.h presence... yes
checking for spawn.h... yes
checking whether the preprocessor supports include_next... yes
checking whether system header files limit the line length... no
checking whether <sys/socket.h> is self-contained... yes
checking for shutdown... yes
checking whether <sys/socket.h> defines the SHUT_* macros... yes
checking for struct sockaddr_storage... yes
checking for sa_family_t... yes
checking for struct sockaddr_storage.ss_family... yes
checking for size_t... yes
checking for working alloca.h... yes
checking for alloca... yes
checking for C/C++ restrict keyword... __restrict
checking whether <wchar.h> uses 'inline' correctly... yes
checking for btowc... yes
checking for canonicalize_file_name... yes
checking for getcwd... yes
checking for readlink... yes
checking for realpath... yes
checking for readlinkat... yes
checking for chown... yes
checking for fchown... yes
checking for _set_invalid_parameter_handler... no
checking for fcntl... yes
checking for symlink... yes
checking for ffsl... yes
checking for isblank... yes
checking for iswctype... yes
checking for mbsrtowcs... yes
checking for mempcpy... yes
checking for wmemchr... yes
checking for wmemcpy... yes
checking for wmempcpy... yes
checking for fpurge... no
checking for __fpurge... yes
checking for __freading... yes
checking for fsync... yes
checking for getdelim... yes
checking for getdtablesize... yes
checking for __fsetlocking... yes
checking for gettimeofday... yes
checking for lstat... yes
checking for mbsinit... yes
checking for mbrtowc... yes
checking for mprotect... yes
checking for getgrouplist... yes
checking for mkostemp... yes
checking for mkostemps... yes
checking for tzset... yes
checking for nl_langinfo... yes
checking for recvmsg... yes
checking for sendmsg... yes
checking for strerror_r... yes
checking for __xpg_strerror_r... yes
checking for pipe... yes
checking for pipe2... yes
checking for posix_openpt... yes
checking for pthread_sigmask... no
checking for secure_getenv... yes
checking for getuid... yes
checking for geteuid... yes
checking for getgid... yes
checking for getegid... yes
checking for setenv... yes
checking for sigaction... yes
checking for sigaltstack... yes
checking for siginterrupt... yes
checking for sleep... yes
checking for snprintf... yes
checking for strdup... yes
checking for catgets... yes
checking for strndup... yes
checking for strptime... yes
checking for localtime_r... yes
checking for timegm... yes
checking for usleep... yes
checking for vasnprintf... no
checking for wcrtomb... yes
checking for iswcntrl... yes
checking for wcwidth... yes
checking for ftruncate... yes
checking for getprogname... no
checking for getexecname... no
checking for newlocale... yes
checking for socketpair... yes
checking for ptsname_r... yes
checking for shutdown... (cached) yes
checking for wctob... yes
checking for cfmakeraw... yes
checking for fallocate... yes
checking for getgrnam_r... yes
checking for getmntent_r... yes
checking for getpwuid_r... yes
checking for getrlimit... yes
checking for if_indextoname... yes
checking for kill... yes
checking for mmap... yes
checking for posix_fallocate... yes
checking for posix_memalign... yes
checking for prlimit... yes
checking for regexec... yes
checking for sched_getaffinity... yes
checking for setgroups... yes
checking for setns... yes
checking for setrlimit... yes
checking for sysctlbyname... no
checking for getifaddrs... yes
checking for sched_setscheduler... yes
checking for unshare... yes
checking for nl_langinfo and CODESET... yes
checking for a traditional french locale... fr_FR
checking whether malloc, realloc, calloc are POSIX compliant... yes
checking whether // is distinct from /... no
checking whether realpath works... yes
checking for uid_t in sys/types.h... yes
checking for unistd.h... (cached) yes
checking for working chown... yes
checking whether chown dereferences symlinks... yes
checking whether chown honors trailing slash... yes
checking whether chown always updates ctime... yes
checking for unsigned long long int... yes
checking if environ is properly declared... yes
checking for complete errno.h... yes
checking for working fcntl.h... yes
checking for pid_t... yes
checking for mode_t... yes
checking whether fdatasync is declared... yes
checking for mbstate_t... yes
checking whether stdin defaults to large file offsets... yes
checking whether fseeko is declared... yes
checking for fseeko... yes
checking whether fflush works on input streams... no
checking whether stat file-mode macros are broken... no
checking for nlink_t... yes
checking whether ftello is declared... yes
checking for ftello... yes
checking whether ftello works... yes
checking for library containing gethostbyname... none required
checking for gethostbyname... yes
checking for library containing getservbyname... none required
checking for getservbyname... yes
checking for library containing inet_ntop... none required
checking whether inet_ntop is declared... yes
checking for IPv4 sockets... yes
checking for IPv6 sockets... yes
checking whether getcwd (NULL, 0) allocates memory for result... yes
checking for getcwd with POSIX signature... yes
checking whether getdelim is declared... yes
checking whether getdtablesize is declared... yes
checking type of array argument to getgroups... gid_t
checking whether getline is declared... yes
checking whether getopt is POSIX compatible... yes
checking whether getpass is declared... yes
checking whether fflush_unlocked is declared... yes
checking whether flockfile is declared... yes
checking whether fputs_unlocked is declared... yes
checking whether funlockfile is declared... yes
checking whether putc_unlocked is declared... yes
checking for struct timeval... yes
checking for wide-enough struct timeval.tv_sec member... yes
checking host CPU and C ABI... x86_64
checking whether ldexp() can be used without linking with libm... yes
checking whether limits.h has ULLONG_WIDTH etc.... yes
checking for wchar_t... yes
checking for max_align_t... yes
checking whether NULL can be used in arbitrary expressions... yes
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for shared library run path origin... done
checking for the common suffixes of directories in the library search path... lib64,lib64
checking whether imported symbols can be declared weak... yes
checking whether the linker supports --as-needed... yes
checking whether the linker supports --push-state... yes
checking for pthread.h... (cached) yes
checking for multithread API to use... posix
checking whether lstat correctly handles trailing slash... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for long long int... yes
checking for a traditional japanese locale... ja_JP
checking for a transitional chinese locale... zh_CN.GB18030
checking for a french Unicode locale... fr_FR.UTF-8
checking for inline... inline
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking whether memchr works... yes
checking whether time_t is signed... yes
checking whether alarm is declared... yes
checking for working mktime... yes
checking whether C symbols are prefixed with underscore at the linker level... no
checking for O_CLOEXEC... yes
checking for promoted mode_t type... mode_t
checking for library containing forkpty... -lutil
checking whether strerror(0) succeeds... yes
checking for strerror_r with POSIX signature... no
checking whether __xpg_strerror_r works... yes
checking whether strerror_r is declared... yes
checking for external symbol _system_configuration... no
checking for library containing setsockopt... none needed
checking for sigset_t... yes
checking for SIGPIPE... yes
checking whether we are using the GNU C Library >= 2.1 or uClibc... yes
checking whether <sys/select.h> is self-contained... yes
checking whether setenv is declared... yes
checking search.h usability... yes
checking search.h presence... yes
checking for search.h... yes
checking for tsearch... yes
checking whether snprintf returns a byte count as in C99... yes
checking whether snprintf is declared... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for wint_t... yes
checking whether wint_t is too small... no
checking whether stdint.h conforms to C99... yes
checking whether stdint.h predates C++11... no
checking whether stdint.h has UINTMAX_WIDTH etc.... yes
checking whether strdup is declared... yes
checking whether strndup is declared... yes
checking whether strnlen is declared... yes
checking for struct tm.tm_gmtoff... yes
checking whether strtok_r is declared... yes
checking for struct timespec in <time.h>... yes
checking whether ttyname_r is declared... yes
checking whether unsetenv is declared... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for intmax_t... yes
checking where to find the exponent in a 'double'... word 1 bit 20
checking for snprintf... (cached) yes
checking for strnlen... yes
checking for wcslen... yes
checking for wcsnlen... yes
checking for mbrtowc... (cached) yes
checking for wcrtomb... (cached) yes
checking whether _snprintf is declared... no
checking whether vsnprintf is declared... yes
checking whether strerror_r is declared... (cached) yes
checking for strerror_r... (cached) yes
checking whether strerror_r returns char *... yes
checking for sig_atomic_t... yes
checking whether ungetc works on arbitrary bytes... yes
checking for inttypes.h... (cached) yes
checking whether the inttypes.h PRIxNN macros are broken... no
checking where to find the exponent in a 'float'... word 0 bit 23
checking whether byte ordering is bigendian... no
checking whether long double and double are the same... no
checking for LC_MESSAGES... yes
checking for CFPreferencesCopyAppValue... no
checking for CFLocaleCopyCurrent... no
checking for library containing posix_spawn... none required
checking for posix_spawn... yes
checking whether posix_spawn works... yes
checking whether posix_spawnattr_setschedpolicy is supported... yes
checking whether posix_spawnattr_setschedparam is supported... yes
checking sys/mkdev.h usability... no
checking sys/mkdev.h presence... no
checking for sys/mkdev.h... no
checking sys/sysmacros.h usability... yes
checking sys/sysmacros.h presence... yes
checking for sys/sysmacros.h... yes
checking for alloca as a compiler built-in... yes
checking whether btowc(0) is correct... yes
checking whether btowc(EOF) is correct... yes
checking for __builtin_expect... yes
checking byteswap.h usability... yes
checking byteswap.h presence... yes
checking for byteswap.h... yes
checking for library containing clock_gettime... none required
checking for clock_gettime... yes
checking for clock_settime... yes
checking whether // is distinct from /... (cached) no
checking whether dup2 works... yes
checking for library containing backtrace_symbols_fd... none required
checking whether fflush works on input streams... (cached) no
checking whether fcntl handles F_DUPFD correctly... yes
checking whether fcntl understands F_DUPFD_CLOEXEC... needs runtime check
checking for library containing fdatasync... none required
checking whether fflush works on input streams... (cached) no
checking for ffs... yes
checking for flexible array member... yes
checking whether conversion from 'int' to 'long double' works... yes
checking for working POSIX fnmatch... yes
checking whether fpurge is declared... no
checking for fseeko... (cached) yes
checking whether fflush works on input streams... (cached) no
checking for _fseeki64... no
checking for ftello... (cached) yes
checking whether ftello works... (cached) yes
checking whether __func__ is available... yes
checking how to do getaddrinfo, freeaddrinfo and getnameinfo... checking for library containing getaddrinfo... none required
checking for getaddrinfo... yes
checking whether gai_strerror is declared... yes
checking whether gai_strerrorA is declared... no
checking for gai_strerror with POSIX signature... yes
checking for struct sockaddr.sa_len... no
checking whether getaddrinfo is declared... yes
checking whether freeaddrinfo is declared... yes
checking whether getnameinfo is declared... yes
checking for struct addrinfo... yes
checking for working getdelim function... yes
checking whether getdtablesize works... yes
checking for getgroups... yes
checking for working getgroups... yes
checking whether getgroups handles negative values... yes
checking for gethostname... yes
checking for HOST_NAME_MAX... yes
checking for getline... yes
checking for working getline function... yes
checking for getpass... yes
checking whether gettimeofday clobbers localtime buffer... no
checking for gettimeofday with POSIX signature... almost
checking for library containing gethostbyname... (cached) none required
checking for gethostbyname... (cached) yes
checking for library containing inet_ntop... (cached) none required
checking whether inet_ntop is declared... (cached) yes
checking for library containing inet_pton... none required
checking whether inet_pton is declared... yes
checking for ioctl... yes
checking for ioctl with POSIX signature... no
checking whether langinfo.h defines CODESET... yes
checking whether langinfo.h defines T_FMT_AMPM... yes
checking whether langinfo.h defines ALTMON_1... no
checking whether langinfo.h defines ERA... yes
checking whether langinfo.h defines YESEXPR... yes
checking whether locale.h conforms to POSIX:2001... yes
checking whether locale.h defines locale_t... yes
checking whether struct lconv is properly defined... yes
checking for pthread_rwlock_t... yes
checking whether pthread_rwlock_rdlock prefers a writer to a reader... no
checking whether lseek detects pipes... yes
checking whether mbrtowc handles incomplete characters... yes
checking whether mbrtowc works as well as mbtowc... yes
checking whether mbrtowc handles a NULL pwc argument... yes
checking whether mbrtowc handles a NULL string argument... yes
checking whether mbrtowc has a correct return value... yes
checking whether mbrtowc returns 0 when parsing a NUL character... yes
checking whether mbrtowc works on empty input... yes
checking whether the C locale is free of encoding errors... no
checking whether mbrtowc handles incomplete characters... (cached) yes
checking whether mbrtowc works as well as mbtowc... (cached) yes
checking whether mbrtowc handles incomplete characters... (cached) yes
checking whether mbrtowc works as well as mbtowc... (cached) yes
checking whether mbsrtowcs works... yes
checking for mkdtemp... yes
checking for __mktime_internal... no
checking whether <net/if.h> is self-contained... yes
checking whether <netinet/in.h> is self-contained... yes
checking whether YESEXPR works... yes
checking whether open recognizes a trailing slash... yes
checking whether openpty is declared... yes
checking for const-safe openpty signature... yes
checking for struct msghdr.msg_accrights... no
checking whether perror matches strerror... yes
checking for sys/pstat.h... no
checking for sys/sysmp.h... no
checking for sys/sysinfo.h... yes
checking for machine/hal_sysinfo.h... no
checking for sys/table.h... no
checking for sys/param.h... (cached) yes
checking for sys/systemcfg.h... no
checking for sys/sysctl.h... yes
checking for pstat_getstatic... no
checking for pstat_getdynamic... no
checking for sysmp... no
checking for getsysinfo... no
checking for sysctl... yes
checking for table... no
checking for sysinfo... yes
checking for struct sysinfo.mem_unit... yes
checking for poll... yes
checking for a shell that conforms to POSIX... /bin/sh
checking whether <pthread.h> pollutes the namespace... no
checking for pthread_t... yes
checking for pthread_spinlock_t... yes
checking for library containing pthread_create and pthread_join... -pthread
checking for pthread_sigmask in -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state... yes
checking whether pthread_sigmask is only a macro... no
checking whether pthread_sigmask returns error numbers... yes
checking whether pthread_sigmask unblocks signals correctly... guessing yes
checking for raise... yes
checking for sigprocmask... yes
checking for rawmemchr... yes
checking whether readlink signature is correct... yes
checking whether readlink handles trailing slash correctly... yes
checking for working re_compile_pattern... yes
checking whether select supports a 0 argument... yes
checking whether select detects invalid fds... yes
checking for library containing getservbyname... (cached) none required
checking for getservbyname... (cached) yes
checking whether setenv validates arguments... yes
checking for struct sigaction.sa_sigaction... yes
checking for volatile sig_atomic_t... yes
checking for sighandler_t... yes
checking for sigprocmask... (cached) yes
checking for stdint.h... (cached) yes
checking for SIZE_MAX... yes
checking whether sleep is declared... yes
checking for working sleep... yes
checking for snprintf... (cached) yes
checking whether snprintf respects a size of 1... yes
checking whether printf supports POSIX/XSI format strings with positions... yes
checking for socklen_t... yes
checking for ssize_t... yes
checking whether stat handles trailing slashes on files... yes
checking for struct stat.st_atim.tv_nsec... yes
checking whether struct stat.st_atim is of type struct timespec... yes
checking for struct stat.st_birthtimespec.tv_nsec... no
checking for struct stat.st_birthtimensec... no
checking for struct stat.st_birthtim.tv_nsec... no
checking for working stdalign.h... yes
checking for va_copy... yes
checking for max_align_t... (cached) yes
checking whether NULL can be used in arbitrary expressions... (cached) yes
checking which flavor of printf attribute matches inttypes macros... system
checking for stpcpy... yes
checking for strcasecmp... yes
checking for strncasecmp... yes
checking whether strncasecmp is declared... yes
checking for strchrnul... yes
checking whether strchrnul works... yes
checking for working strerror function... yes
checking for working strndup... yes
checking for working strnlen... yes
checking for strsep... yes
checking for strtok_r... yes
checking whether strtok_r works... yes
checking whether <sys/ioctl.h> declares ioctl... yes
checking for nlink_t... (cached) yes
checking for struct utsname... yes
checking whether localtime_r is declared... yes
checking whether localtime_r is compatible with its POSIX signature... yes
checking for ttyname_r... yes
checking whether ttyname_r is compatible with its POSIX signature... yes
checking whether ttyname_r works with small buffers... guessing yes
checking for uname... yes
checking for unsetenv... yes
checking for unsetenv() return type... int
checking whether unsetenv obeys POSIX... yes
checking for useconds_t... yes
checking whether usleep allows large arguments... yes
checking for ptrdiff_t... yes
checking for vasprintf... yes
checking for vsnprintf... yes
checking whether snprintf respects a size of 1... (cached) yes
checking whether printf supports POSIX/XSI format strings with positions... (cached) yes
checking whether mbrtowc handles incomplete characters... (cached) yes
checking whether mbrtowc works as well as mbtowc... (cached) yes
checking whether wcrtomb return value is correct... yes
checking whether iswcntrl works... yes
checking for towlower... yes
checking for wctype_t... yes
checking for wctrans_t... yes
checking whether wcwidth is declared... yes
checking whether wcwidth works reasonably in UTF-8 locales... yes
checking for stdint.h... (cached) yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional french locale... (cached) fr_FR
checking for a turkish Unicode locale... tr_TR.UTF-8
checking whether dup works... yes
checking for error_at_line... yes
checking whether fdopen sets errno... yes
checking for getpagesize... yes
checking whether getpagesize is declared... yes
checking whether program_invocation_name is declared... yes
checking whether program_invocation_short_name is declared... yes
checking whether __argv is declared... no
checking for grantpt... yes
checking whether byte ordering is bigendian... (cached) no
checking whether byte ordering is bigendian... (cached) no
checking whether INT32_MAX < INTMAX_MAX... yes
checking whether INT64_MAX == LONG_MAX... yes
checking whether UINT32_MAX < UINTMAX_MAX... yes
checking whether UINT64_MAX == ULONG_MAX... yes
checking whether isnan(double) can be used without linking with libm... yes
checking where to find the exponent in a 'double'... (cached) word 1 bit 20
checking whether isnan(float) can be used without linking with libm... yes
checking whether isnan(float) works... yes
checking where to find the exponent in a 'float'... (cached) word 0 bit 23
checking whether isnan(long double) can be used without linking with libm... yes
checking whether isnanl works... yes
checking where to find the exponent in a 'long double'... word 2 bit 0
checking for setlocale... yes
checking for uselocale... yes
checking for getlocalename_l... no
checking whether NAN macro works... yes
checking whether HUGE_VAL works... yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking for library containing nanosleep... none required
checking for working nanosleep... no (mishandles large arguments)
checking for library containing if_nameindex... none required
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking whether posix_spawn_file_actions_addclose works... yes
checking whether posix_spawn_file_actions_adddup2 works... yes
checking whether posix_spawn_file_actions_addopen works... yes
checking for ptsname... yes
checking whether ptsname sets errno on failure... yes
checking whether ptsname_r has the same signature as in glibc... yes
checking for putenv compatible with GNU and SVID... yes
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking for signbit macro... yes
checking for signbit compiler built-ins... yes
checking for posix_spawnattr_t... yes
checking for posix_spawn_file_actions_t... yes
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking whether symlink handles trailing slash correctly... yes
checking for pthread_atfork... yes
checking for unlockpt... yes
checking for waitid... yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking whether wctob works... yes
checking whether wctob is declared... yes
checking for uid_t in sys/types.h... (cached) yes
checking for sys/mkdev.h... (cached) no
checking for sys/sysmacros.h... (cached) yes
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... (cached) ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for ld used by gcc... (cached) /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... (cached) yes
checking for how to mark DSO non-deletable at runtime... -Wl,-z -Wl,nodelete
checking for how to set DSO symbol versions... -Wl,--version-script=
checking whether C compiler handles -Werror -Wunknown-warning-option... no
checking whether the C compiler's -Wformat allows NULL strings... yes
checking whether pragma GCC diagnostic push works... yes
checking whether the C compiler's -Wlogical-op gives bogus warnings... no
checking whether gcc gives bogus warnings for -Wlogical-op... yes
checking whether clang gives bogus warnings for -Wdouble-promotion... no
checking whether -Wno-missing-field-initializers is supported... yes
checking whether -Wno-missing-field-initializers is needed... no
checking whether -Wuninitialized is supported... yes
checking max safe object size... 9223372036854775807
checking whether C compiler handles -Wframe-larger-than=4096... yes
checking whether C compiler handles -Wframe-larger-than=32768... yes
checking whether C compiler handles -fno-common... yes
checking whether C compiler handles -W... yes
checking whether C compiler handles -Waddress... yes
checking whether C compiler handles -Waggressive-loop-optimizations... yes
checking whether C compiler handles -Wall... yes
checking whether C compiler handles -Wattribute-alias... no
checking whether C compiler handles -Wattributes... yes
checking whether C compiler handles -Wbad-function-cast... yes
checking whether C compiler handles -Wbool-compare... yes
checking whether C compiler handles -Wbool-operation... yes
checking whether C compiler handles -Wbuiltin-declaration-mismatch... yes
checking whether C compiler handles -Wbuiltin-macro-redefined... yes
checking whether C compiler handles -Wcast-align... yes
checking whether C compiler handles -Wcast-align=strict... no
checking whether C compiler handles -Wcast-function-type... no
checking whether C compiler handles -Wchar-subscripts... yes
checking whether C compiler handles -Wclobbered... yes
checking whether C compiler handles -Wcomment... yes
checking whether C compiler handles -Wcomments... yes
checking whether C compiler handles -Wcoverage-mismatch... yes
checking whether C compiler handles -Wcpp... yes
checking whether C compiler handles -Wdangling-else... yes
checking whether C compiler handles -Wdate-time... yes
checking whether C compiler handles -Wdeprecated-declarations... yes
checking whether C compiler handles -Wdesignated-init... yes
checking whether C compiler handles -Wdiscarded-array-qualifiers... yes
checking whether C compiler handles -Wdiscarded-qualifiers... yes
checking whether C compiler handles -Wdiv-by-zero... yes
checking whether C compiler handles -Wdouble-promotion... yes
checking whether C compiler handles -Wduplicated-cond... yes
checking whether C compiler handles -Wduplicate-decl-specifier... yes
checking whether C compiler handles -Wempty-body... yes
checking whether C compiler handles -Wendif-labels... yes
checking whether C compiler handles -Wexpansion-to-defined... yes
checking whether C compiler handles -Wextra... yes
checking whether C compiler handles -Wformat-contains-nul... yes
checking whether C compiler handles -Wformat-extra-args... yes
checking whether C compiler handles -Wformat-security... yes
checking whether C compiler handles -Wformat-y2k... yes
checking whether C compiler handles -Wformat-zero-length... yes
checking whether C compiler handles -Wframe-address... yes
checking whether C compiler handles -Wfree-nonheap-object... yes
checking whether C compiler handles -Whsa... yes
checking whether C compiler handles -Wif-not-aligned... no
checking whether C compiler handles -Wignored-attributes... yes
checking whether C compiler handles -Wignored-qualifiers... yes
checking whether C compiler handles -Wimplicit... yes
checking whether C compiler handles -Wimplicit-function-declaration... yes
checking whether C compiler handles -Wimplicit-int... yes
checking whether C compiler handles -Wincompatible-pointer-types... yes
checking whether C compiler handles -Winit-self... yes
checking whether C compiler handles -Winline... yes
checking whether C compiler handles -Wint-conversion... yes
checking whether C compiler handles -Wint-in-bool-context... yes
checking whether C compiler handles -Wint-to-pointer-cast... yes
checking whether C compiler handles -Winvalid-memory-model... yes
checking whether C compiler handles -Winvalid-pch... yes
checking whether C compiler handles -Wlogical-not-parentheses... yes
checking whether C compiler handles -Wlogical-op... yes
checking whether C compiler handles -Wmain... yes
checking whether C compiler handles -Wmaybe-uninitialized... yes
checking whether C compiler handles -Wmemset-elt-size... yes
checking whether C compiler handles -Wmemset-transposed-args... yes
checking whether C compiler handles -Wmisleading-indentation... yes
checking whether C compiler handles -Wmissing-attributes... no
checking whether C compiler handles -Wmissing-braces... yes
checking whether C compiler handles -Wmissing-declarations... yes
checking whether C compiler handles -Wmissing-field-initializers... yes
checking whether C compiler handles -Wmissing-include-dirs... yes
checking whether C compiler handles -Wmissing-parameter-type... yes
checking whether C compiler handles -Wmissing-prototypes... yes
checking whether C compiler handles -Wmultichar... yes
checking whether C compiler handles -Wmultistatement-macros... no
checking whether C compiler handles -Wnarrowing... yes
checking whether C compiler handles -Wnested-externs... yes
checking whether C compiler handles -Wnonnull... yes
checking whether C compiler handles -Wnonnull-compare... yes
checking whether C compiler handles -Wnull-dereference... yes
checking whether C compiler handles -Wodr... yes
checking whether C compiler handles -Wold-style-declaration... yes
checking whether C compiler handles -Wold-style-definition... yes
checking whether C compiler handles -Wopenmp-simd... yes
checking whether C compiler handles -Woverflow... yes
checking whether C compiler handles -Woverride-init... yes
checking whether C compiler handles -Wpacked-bitfield-compat... yes
checking whether C compiler handles -Wpacked-not-aligned... no
checking whether C compiler handles -Wparentheses... yes
checking whether C compiler handles -Wpointer-arith... yes
checking whether C compiler handles -Wpointer-compare... yes
checking whether C compiler handles -Wpointer-sign... yes
checking whether C compiler handles -Wpointer-to-int-cast... yes
checking whether C compiler handles -Wpragmas... yes
checking whether C compiler handles -Wpsabi... yes
checking whether C compiler handles -Wrestrict... yes
checking whether C compiler handles -Wreturn-local-addr... yes
checking whether C compiler handles -Wreturn-type... yes
checking whether C compiler handles -Wscalar-storage-order... yes
checking whether C compiler handles -Wsequence-point... yes
checking whether C compiler handles -Wshadow... yes
checking whether C compiler handles -Wshift-count-negative... yes
checking whether C compiler handles -Wshift-count-overflow... yes
checking whether C compiler handles -Wshift-negative-value... yes
checking whether C compiler handles -Wsizeof-array-argument... yes
checking whether C compiler handles -Wsizeof-pointer-div... no
checking whether C compiler handles -Wsizeof-pointer-memaccess... yes
checking whether C compiler handles -Wstrict-aliasing... yes
checking whether C compiler handles -Wstrict-prototypes... yes
checking whether C compiler handles -Wstringop-truncation... no
checking whether C compiler handles -Wsuggest-attribute=cold... no
checking whether C compiler handles -Wsuggest-attribute=const... yes
checking whether C compiler handles -Wsuggest-attribute=format... yes
checking whether C compiler handles -Wsuggest-attribute=malloc... no
checking whether C compiler handles -Wsuggest-attribute=noreturn... yes
checking whether C compiler handles -Wsuggest-attribute=pure... yes
checking whether C compiler handles -Wsuggest-final-methods... yes
checking whether C compiler handles -Wsuggest-final-types... yes
checking whether C compiler handles -Wswitch... yes
checking whether C compiler handles -Wswitch-bool... yes
checking whether C compiler handles -Wswitch-unreachable... yes
checking whether C compiler handles -Wsync-nand... yes
checking whether C compiler handles -Wtautological-compare... yes
checking whether C compiler handles -Wtrampolines... yes
checking whether C compiler handles -Wtrigraphs... yes
checking whether C compiler handles -Wtype-limits... yes
checking whether C compiler handles -Wuninitialized... yes
checking whether C compiler handles -Wunknown-pragmas... yes
checking whether C compiler handles -Wunused... yes
checking whether C compiler handles -Wunused-but-set-parameter... yes
checking whether C compiler handles -Wunused-but-set-variable... yes
checking whether C compiler handles -Wunused-function... yes
checking whether C compiler handles -Wunused-label... yes
checking whether C compiler handles -Wunused-local-typedefs... yes
checking whether C compiler handles -Wunused-parameter... yes
checking whether C compiler handles -Wunused-result... yes
checking whether C compiler handles -Wunused-value... yes
checking whether C compiler handles -Wunused-variable... yes
checking whether C compiler handles -Wvarargs... yes
checking whether C compiler handles -Wvariadic-macros... yes
checking whether C compiler handles -Wvector-operation-performance... yes
checking whether C compiler handles -Wvolatile-register-var... yes
checking whether C compiler handles -Wwrite-strings... yes
checking whether C compiler handles -Walloc-size-larger-than=9223372036854775807... yes
checking whether C compiler handles -Warray-bounds=2... yes
checking whether C compiler handles -Wformat-overflow=2... yes
checking whether C compiler handles -Wformat-truncation=2... yes
checking whether C compiler handles -Wimplicit-fallthrough=5... yes
checking whether C compiler handles -Wnormalized=nfc... yes
checking whether C compiler handles -Wshift-overflow=2... yes
checking whether C compiler handles -Wstringop-overflow=2... yes
checking whether C compiler handles -Wunused-const-variable=2... yes
checking whether C compiler handles -Wvla-larger-than=4031... yes
checking whether C compiler handles -Wno-sign-compare... yes
checking whether C compiler handles -Wno-cast-function-type... no
checking whether C compiler handles -Wjump-misses-init... yes
checking whether C compiler handles -Wswitch-enum... yes
checking whether C compiler handles -Wno-format-nonliteral... yes
checking whether C compiler handles -Wno-format-truncation... yes
checking whether C compiler handles -fstack-protector-strong... yes
checking whether C compiler handles -fexceptions... yes
checking whether C compiler handles -fasynchronous-unwind-tables... yes
checking whether C compiler handles -fipa-pure-const... yes
checking whether C compiler handles -Wno-suggest-attribute=pure... yes
checking whether C compiler handles -Wno-suggest-attribute=const... yes
checking whether C compiler handles -Werror... yes
checking whether C compiler handles -fPIE -DPIE -pie... yes
checking for how to force completely read-only GOT table... -Wl,-z -Wl,relro -Wl,-z -Wl,now
checking for how to avoid indirect lib deps... -Wl,--no-copy-dt-needed-entries
checking for how to stop undefined symbols at link time... -Wl,-z -Wl,defs
checking sys/acl.h usability... yes
checking sys/acl.h presence... yes
checking for sys/acl.h... yes
checking for aa_change_profile in -lapparmor... no
checking for pthread_mutexattr_init... yes
checking for pthread.h... (cached) yes
checking whether pthread_sigmask does anything... yes
checking for atomic ops implementation... gcc
checking for getxattr in -lattr... yes
checking sys/xattr.h usability... yes
checking sys/xattr.h presence... yes
checking for sys/xattr.h... yes
checking for audit_encode_nv_string in -laudit... yes
checking libaudit.h usability... yes
checking libaudit.h presence... yes
checking for libaudit.h... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for AVAHI... yes
checking for library containing tgetent... -lncurses
checking whether rl_completion_quote_character is declared... yes
checking for readline in -lreadline... yes
checking readline/readline.h usability... yes
checking readline/readline.h presence... yes
checking for readline/readline.h... yes
checking for rl_initialize in -lreadline... yes
checking for BASH_COMPLETION... no
checking for BLKID... yes
checking for capng_updatev in -lcap-ng... yes
checking cap-ng.h usability... yes
checking cap-ng.h presence... yes
checking for cap-ng.h... yes
checking for CURL... yes
checking for DBUS... yes
checking for dbus_watch_get_unix_fd... yes
checking for DBusBasicValue... yes
checking for DEVMAPPER... yes
checking for dlfcn.h... (cached) yes
checking for library containing dlopen... -ldl
checking for FUSE... yes
checking for GLUSTERFS... yes
checking for GNUTLS... yes
checking for HAL... no
checking for LIBISCSI... no
checking for NETCF... yes
checking for ncf_change_begin... yes
checking whether to compile with macvtap support... yes
checking whether MACVLAN_MODE_PASSTHRU is declared... yes
checking for LIBNL... yes
checking for LIBNL_ROUTE3... yes
checking for LIBPARTED... yes
checking for parted... /sbin/parted
checking libpcap pcap-config >= 1.0.0 ... yes
checking for LIBSSH... yes
checking for ssh_get_server_publickey... no
checking for LIBXML... yes
checking for struct _xmlURI.query_raw... yes
checking whether to compile with macvtap support... yes
checking whether MACVLAN_MODE_PASSTHRU is declared... (cached) yes
checking for NETCF... yes
checking for ncf_change_begin... (cached) yes
checking for gettext... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for xgettext... xgettext
checking for msgfmt... msgfmt
checking for msgmerge... msgmerge
checking msgfmt is GNU tool... yes
checking for numa_available in -lnuma... yes
checking numa.h usability... yes
checking numa.h presence... yes
checking for numa.h... yes
checking for numa_bitmask_isbitset in -lnuma... yes
checking for OPENWSMAN... yes
checking for PCIACCESS... yes
checking for init script type... systemd
checking for pkcheck... /usr/bin/pkcheck
checking for pthread_mutexattr_init... (cached) yes
checking for pthread.h... (cached) yes
checking whether pthread_sigmask does anything... (cached) yes
checking for library containing tgetent... (cached) -lncurses
checking whether rl_completion_quote_character is declared... (cached) yes
checking for readline in -lreadline... (cached) yes
checking for readline/readline.h... (cached) yes
checking for rl_initialize in -lreadline... (cached) yes
checking for sanlock_init in -lsanlock_client... yes
checking sanlock.h usability... yes
checking sanlock.h presence... yes
checking for sanlock.h... yes
checking whether SANLK_INQ_WAIT is declared... yes
checking for sanlock_killpath in -lsanlock_client... yes
checking for sanlock_inq_lockspace in -lsanlock_client... yes
checking for sanlock_write_lockspace in -lsanlock_client... yes
checking for sanlock_strerror in -lsanlock_client... yes
checking for sasl_client_init in -lsasl2... yes
checking sasl/sasl.h usability... yes
checking sasl/sasl.h presence... yes
checking for sasl/sasl.h... yes
checking for fgetfilecon_raw in -lselinux... yes
checking selinux/selinux.h usability... yes
checking selinux/selinux.h presence... yes
checking for selinux/selinux.h... yes
checking for selinux setcon parameter type... const
checking for selinux selabel_open parameter type... const
checking SELinux mount point... /selinux
checking selinux/label.h usability... yes
checking selinux/label.h presence... yes
checking for selinux/label.h... yes
checking for SSH2... yes
checking for UDEV... yes
checking for udev_monitor_set_receive_buffer_size... yes
checking whether to compile with virtual port support... yes
checking for WIRESHARK_DISSECTOR... yes
checking for xdrmem_create in -lportablexdr... no
checking for library containing xdrmem_create... none required
checking for xdr_u_int64_t... no
checking where to find <rpc/rpc.h>... none
checking for qemu-kvm... no
checking for qemu... no
checking for kvm... no
checking for qemu-system-x86_64... no
checking for yajl_parse_complete in -lyajl... no
checking for yajl_tree_parse in -lyajl... yes
checking yajl/yajl_common.h usability... yes
checking yajl/yajl_common.h presence... yes
checking for yajl/yajl_common.h... yes
checking size of long... 8
checking pwd.h usability... yes
checking pwd.h presence... yes
checking for pwd.h... yes
checking regex.h usability... yes
checking regex.h presence... yes
checking for regex.h... yes
checking sys/un.h usability... yes
checking sys/un.h presence... yes
checking for sys/un.h... yes
checking sys/poll.h usability... yes
checking sys/poll.h presence... yes
checking for sys/poll.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking mntent.h usability... yes
checking mntent.h presence... yes
checking for mntent.h... yes
checking net/ethernet.h usability... yes
checking net/ethernet.h presence... yes
checking for net/ethernet.h... yes
checking linux/magic.h usability... yes
checking linux/magic.h presence... yes
checking for linux/magic.h... yes
checking for sys/un.h... (cached) yes
checking sys/syscall.h usability... yes
checking sys/syscall.h presence... yes
checking for sys/syscall.h... yes
checking for sys/sysctl.h... (cached) yes
checking netinet/tcp.h usability... yes
checking netinet/tcp.h presence... yes
checking for netinet/tcp.h... yes
checking ifaddrs.h usability... yes
checking ifaddrs.h presence... yes
checking for ifaddrs.h... yes
checking libtasn1.h usability... yes
checking libtasn1.h presence... yes
checking for libtasn1.h... yes
checking sys/ucred.h usability... no
checking sys/ucred.h presence... no
checking for sys/ucred.h... no
checking sys/mount.h usability... yes
checking sys/mount.h presence... yes
checking for sys/mount.h... yes
checking stdarg.h usability... yes
checking stdarg.h presence... yes
checking for stdarg.h... yes
checking whether htole64 is declared... yes
checking for stat... yes
checking for stat64... yes
checking for __xstat... yes
checking for __xstat64... yes
checking for lstat... (cached) yes
checking for lstat64... yes
checking for __lxstat... yes
checking for __lxstat64... yes
checking for struct ifreq... yes
checking for struct sockpeercred... no
checking whether ETH_FLAG_TXVLAN is declared... yes
checking whether ETH_FLAG_NTUPLE is declared... yes
checking whether ETH_FLAG_RXHASH is declared... yes
checking whether ETH_FLAG_LRO is declared... yes
checking whether ETHTOOL_GGSO is declared... yes
checking whether ETHTOOL_GGRO is declared... yes
checking whether ETHTOOL_GFLAGS is declared... yes
checking whether ETHTOOL_GFEATURES is declared... yes
checking whether ETHTOOL_SCOALESCE is declared... yes
checking whether ETHTOOL_GCOALESCE is declared... yes
checking whether SEEK_HOLE is declared... yes
checking for gettext in -lintl... no
checking for rpcgen... /usr/bin/rpcgen
checking for xmllint... /usr/bin/xmllint
checking for xsltproc... /usr/bin/xsltproc
checking for augparse... /usr/bin/augparse
checking whether ln -s works... yes
checking for dmidecode... dmidecode
checking for dnsmasq... /sbin/dnsmasq
checking for radvd... /sbin/radvd
checking for tc... tc
checking for udevadm... /usr/bin/udevadm
checking for udevsettle... no
checking for modprobe... /sbin/modprobe
checking for rmmod... /sbin/rmmod
checking for mm-ctl... mm-ctl
checking for ovs-vsctl... ovs-vsctl
checking for scrub... /usr/bin/scrub
checking for addr2line... /usr/bin/addr2line
checking for ip... /sbin/ip
checking for iptables... /sbin/iptables
checking for ip6tables... /sbin/ip6tables
checking for ebtables... /sbin/ebtables
checking for qemu-bridge-helper... /usr/libexec/qemu-bridge-helper
checking for qemu-pr-helper... /usr/bin/qemu-pr-helper
checking for xen_vm_start in -lxenserver... no
checking for LIBXL... no
checking for libxl_ctx_alloc in -lxenlight... yes
checking libxl.h usability... yes
checking libxl.h presence... yes
checking for libxl.h... yes
checking libxlutil.h usability... yes
checking libxlutil.h presence... yes
checking for libxlutil.h... yes
checking for xtl_createlogger_stdiostream in -lxentoollog... yes
checking for libxl_domain_config_from_json... yes
checking for PARALLELS_SDK... no
checking for bhyve... no
checking for bhyvectl... no
checking for bhyveload... no
checking sys/inotify.h usability... yes
checking sys/inotify.h presence... yes
checking for sys/inotify.h... yes
checking for dtrace... /usr/bin/dtrace
checking for numad... /usr/bin/numad
checking for init script type... systemd
checking for whether to install sysctl config... yes
checking nss.h usability... yes
checking nss.h presence... yes
checking for nss.h... yes
checking for struct gaih_addrtuple... yes
checking for ns_mtab... no
checking for nss_module_unregister_fn... no
checking linux/kvm.h usability... yes
checking linux/kvm.h presence... yes
checking for linux/kvm.h... yes
checking whether <linux/*.h> and <netinet/*.h> headers are compatible... yes
checking for linux/param.h... yes
checking for linux/sockios.h... yes
checking for linux/if_bridge.h... yes
checking for linux/if_tun.h... yes
checking for pkg-config... (cached) /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for selinux_virtual_domain_context_path... yes
checking for selinux_virtual_image_context_path... yes
checking for selinux_lxc_contexts_path... yes
checking for mntent.h... (cached) yes
checking for mount... /usr/bin/mount
checking for umount... /usr/bin/umount
checking for mkfs... /sbin/mkfs
checking for showmount... /sbin/showmount
checking for pvcreate... /sbin/pvcreate
checking for vgcreate... /sbin/vgcreate
checking for lvcreate... /sbin/lvcreate
checking for pvremove... /sbin/pvremove
checking for vgremove... /sbin/vgremove
checking for lvremove... /sbin/lvremove
checking for lvchange... /sbin/lvchange
checking for vgchange... /sbin/vgchange
checking for vgscan... /sbin/vgscan
checking for pvs... /sbin/pvs
checking for vgs... /sbin/vgs
checking for lvs... /sbin/lvs
checking for iscsiadm... /sbin/iscsiadm
checking rbd/librbd.h usability... yes
checking rbd/librbd.h presence... yes
checking for rbd/librbd.h... yes
checking for rbd_get_features... yes
checking for collie... no
checking for dog... /usr/bin/dog
checking for zfs... /sbin/zfs
checking for zpool... /sbin/zpool
checking for vstorage... no
checking for vstorage-mount... no
checking for umount... (cached) /usr/bin/umount
checking linux/btrfs.h usability... yes
checking linux/btrfs.h presence... yes
checking for linux/btrfs.h... yes
checking xfs/xfs.h usability... no
checking xfs/xfs.h presence... no
checking for xfs/xfs.h... no
checking linux/devlink.h usability... yes
checking linux/devlink.h presence... yes
checking for linux/devlink.h... yes
checking whether DEVLINK_CMD_ESWITCH_GET is declared... yes
checking whether VHOST_VSOCK_SET_GUEST_CID is declared... yes
checking for python3... /usr/bin/python3
checking for perl... /usr/bin/perl
checking Whether to build test suite by default... yes
checking whether GET_VLAN_VID_CMD is declared... yes
checking for struct ifreq.ifr_newname... yes
checking for struct ifreq.ifr_ifindex... yes
checking for struct ifreq.ifr_index... no
checking for struct ifreq.ifr_hwaddr... yes
checking whether BRDGSFD is declared... no
checking whether BRDGADD is declared... no
checking whether BRDGDEL is declared... no
checking whether cpuset_getaffinity is declared... no
checking for struct if_data.ifi_oqdrops... no
checking whether clock_serv_t is declared... no
checking whether host_get_clock_service is declared... no
checking whether clock_get_time is declared... no
checking whether this build is done by a static analysis tool... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating run
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating include/libvirt/Makefile
config.status: creating docs/Makefile
config.status: creating gnulib/lib/Makefile
config.status: creating gnulib/tests/Makefile
config.status: creating .color_coded
config.status: creating .ycm_extra_conf.py
config.status: creating libvirt.pc
config.status: creating libvirt-qemu.pc
config.status: creating libvirt-lxc.pc
config.status: creating libvirt-admin.pc
config.status: creating src/libvirt.pc
config.status: creating src/libvirt-qemu.pc
config.status: creating src/libvirt-lxc.pc
config.status: creating libvirt.spec
config.status: creating mingw-libvirt.spec
config.status: creating po/Makefile
config.status: creating include/libvirt/libvirt-common.h
config.status: creating examples/Makefile
config.status: creating tests/Makefile
config.status: creating tools/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
configure:
configure: Configuration summary
configure: =====================
configure:
configure: Drivers
configure:
configure: QEMU: yes
configure: UML: yes
configure: OpenVZ: yes
configure: VMware: yes
configure: VBox: yes
configure: XenAPI: no
configure: libxl: yes
configure: LXC: yes
configure: PHYP: yes
configure: ESX: yes
configure: Hyper-V: yes
configure: vz: no
configure: Bhyve: no
configure: Test: yes
configure: Remote: yes
configure: Network: yes
configure: Libvirtd: yes
configure: Interface: yes
configure:
configure: Storage Drivers
configure:
configure: Dir: yes
configure: FS: yes
configure: NetFS: yes
configure: LVM: yes
configure: iSCSI: yes
configure: iscsi-direct: no
configure: SCSI: yes
configure: mpath: yes
configure: Disk: yes
configure: RBD: yes
configure: Sheepdog: yes
configure: Gluster: yes
configure: ZFS: yes
configure: Virtuozzo storage: no
configure:
configure: Security Drivers
configure:
configure: SELinux: yes
configure: AppArmor: no
configure:
configure: Driver Loadable Modules
configure:
configure: driver_modules: yes (CFLAGS='' LIBS='-ldl')
configure:
configure: Libraries
configure:
configure: acl: yes (CFLAGS='' LIBS='-lacl')
configure: apparmor: no
configure: attr: yes (CFLAGS='' LIBS='-lattr')
configure: audit: yes (CFLAGS='' LIBS='-laudit')
configure: avahi: yes (CFLAGS='-D_REENTRANT ' LIBS='-lavahi-common -lavahi-client ')
configure: bash_completion: no
configure: blkid: yes (CFLAGS='-I/usr/include/blkid -I/usr/include/uuid ' LIBS='-lblkid ')
configure: capng: yes (CFLAGS='' LIBS='-lcap-ng')
configure: curl: yes (CFLAGS='-DCURL_DISABLE_TYPECHECK ' LIBS='-lcurl ')
configure: dbus: yes (CFLAGS='-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include ' LIBS='-ldbus-1 ')
configure: dlopen: yes (CFLAGS='' LIBS='-ldl')
configure: firewalld: yes (CFLAGS='' LIBS='')
configure: fuse: yes (CFLAGS='-I/usr/include/fuse -D_FILE_OFFSET_BITS=64 ' LIBS='-lfuse -pthread ')
configure: glusterfs: yes (CFLAGS='-I/usr/include/glusterfs -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -DUSE_POSIX_ACLS=1 -I/usr/include/uuid ' LIBS='-lacl -lgfapi -lglusterfs -lgfrpc -lgfxdr -luuid ')
configure: gnutls: yes (CFLAGS='-I/usr/include/p11-kit-1 ' LIBS='-lgnutls ')
configure: hal: no
configure: libiscsi: no
configure: libnl: yes (CFLAGS='-I/usr/include/libnl3 -I/usr/include/libnl3 ' LIBS='-lnl-3 -lnl-route-3 -lnl-3 ')
configure: libpcap: yes (CFLAGS='' LIBS='-lpcap')
configure: libssh: yes (CFLAGS='' LIBS='-lssh ')
configure: libxl: yes (CFLAGS=' -DLIBXL_API_VERSION=0x040400' LIBS='-lxenlight -lxlutil -lxenstore -lxentoollog')
configure: libxml: yes (CFLAGS='-I/usr/include/libxml2 ' LIBS='-lxml2 ')
configure: macvtap: yes (CFLAGS='' LIBS='')
configure: netcf: yes (CFLAGS='' LIBS='-lnetcf ')
configure: NLS: yes
configure: nss: yes
configure: numactl: yes (CFLAGS='' LIBS='-lnuma')
configure: openwsman: yes (CFLAGS='-I/usr/include/openwsman ' LIBS='-lwsman -lwsman_client -lwsman_curl_client_transport ')
configure: pciaccess: yes (CFLAGS='' LIBS='-lpciaccess ')
configure: pm_utils: no
configure: polkit: yes
configure: rbd: yes (CFLAGS='' LIBS='-lrbd -lrados')
configure: readline: yes (CFLAGS='-D_FUNCTION_DEF ' LIBS='-lreadline')
configure: sanlock: yes (CFLAGS='' LIBS='-lsanlock_client')
configure: sasl: yes (CFLAGS='' LIBS='-lsasl2')
configure: selinux: yes (CFLAGS='' LIBS='-lselinux')
configure: ssh2: yes (CFLAGS='' LIBS='-lssh2 ')
configure: udev: yes (CFLAGS='' LIBS='-ludev ')
configure: virtualport: yes (CFLAGS='' LIBS='')
configure: xdr: yes (CFLAGS='' LIBS='')
configure: xenapi: no
configure: yajl: yes (CFLAGS='' LIBS='-lyajl')
configure:
configure: Windows
configure:
configure: Cygwin: no
configure: MinGW: no
configure: MSVC: no
configure: windres: no
configure:
configure: Test suite
configure:
configure: Coverage: no
configure: Alloc OOM: no
configure:
configure: Miscellaneous
configure:
configure: Debug: yes
configure: Use -Werror: yes
configure: Warning Flags: -fno-common -W -Waddress -Waggressive-loop-optimizations -Wall -Wattributes -Wbad-function-cast -Wbool-compare -Wbool-operation -Wbuiltin-declaration-mismatch -Wbuiltin-macro-redefined -Wcast-align -Wchar-subscripts -Wclobbered -Wcomment -Wcomments -Wcoverage-mismatch -Wcpp -Wdangling-else -Wdate-time -Wdeprecated-declarations -Wdesignated-init -Wdiscarded-array-qualifiers -Wdiscarded-qualifiers -Wdiv-by-zero -Wdouble-promotion -Wduplicated-cond -Wduplicate-decl-specifier -Wempty-body -Wendif-labels -Wexpansion-to-defined -Wextra -Wformat-contains-nul -Wformat-extra-args -Wformat-security -Wformat-y2k -Wformat-zero-length -Wframe-address -Wfree-nonheap-object -Whsa -Wignored-attributes -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wincompatible-pointer-types -Winit-self -Winline -Wint-conversion -Wint-in-bool-context -Wint-to-pointer-cast -Winvalid-memory-model -Winvalid-pch -Wlogical-not-parentheses -Wlogical-op -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation -Wmissing-braces -Wmissing-declarations -Wmissing-field-initializers -Wmissing-include-dirs -Wmissing-parameter-type -Wmissing-prototypes -Wmultichar -Wnarrowing -Wnested-externs -Wnonnull -Wnonnull-compare -Wnull-dereference -Wodr -Wold-style-declaration -Wold-style-definition -Wopenmp-simd -Woverflow -Woverride-init -Wpacked-bitfield-compat -Wparentheses -Wpointer-arith -Wpointer-compare -Wpointer-sign -Wpointer-to-int-cast -Wpragmas -Wpsabi -Wrestrict -Wreturn-local-addr -Wreturn-type -Wscalar-storage-order -Wsequence-point -Wshadow -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wsizeof-array-argument -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-prototypes -Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wsuggest-final-methods -Wsuggest-final-types -Wswitch -Wswitch-bool -Wswitch-unreachable -Wsync-nand -Wtautological-compare -Wtrampolines -Wtrigraphs
-Wtype-limits -Wuninitialized -Wunknown-pragmas -Wunused -Wunused-but-set-parameter -Wunused-but-set-variable -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-parameter -Wunused-result -Wunused-value -Wunused-variable -Wvarargs -Wvariadic-macros -Wvector-operation-performance -Wvolatile-register-var -Wwrite-strings -Walloc-size-larger-than=9223372036854775807 -Warray-bounds=2 -Wformat-overflow=2 -Wformat-truncation=2 -Wimplicit-fallthrough=5 -Wnormalized=nfc -Wshift-overflow=2 -Wstringop-overflow=2 -Wunused-const-variable=2 -Wvla-larger-than=4031 -Wno-sign-compare -Wjump-misses-init -Wswitch-enum -Wno-format-nonliteral -Wno-format-truncation -fstack-protector-strong -fexceptions -fasynchronous-unwind-tables -fipa-pure-const -Wno-suggest-attribute=pure -Wno-suggest-attribute=const -Werror
configure: DTrace: yes
configure: numad: yes
configure: Init script: systemd
configure: Char device locks: /var/lock
configure: Default Editor: vi
configure: Loader/NVRAM:
configure: virt-login-shell: yes
configure: virt-host-validate: yes
configure: TLS priority: NORMAL
configure:
configure: Developer Tools
configure:
configure: wireshark_dissector: yes (CFLAGS='-I/usr/include/wireshark -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread ' LIBS='-lwireshark -Wl,--export-dynamic -lgmodule-2.0 -lgthread-2.0 -pthread -lglib-2.0 ')
configure:
configure: Privileges
configure:
configure: QEMU: root:root
configure:
Now type 'make' to compile libvirt.
GEN spacing-check
Curly brackets around single-line body:
src/qemu/qemu_command.c:3273-3275:
if (qemuBuildMemoryBackendPropsShare(props, memAccess) < 0) {
goto cleanup;
}
Curly brackets around single-line body:
src/qemu/qemu_command.c:3319-3321:
if (qemuBuildMemoryBackendPropsShare(props, memAccess) < 0) {
goto cleanup;
}
Curly brackets around single-line body:
src/qemu/qemu_extdevice.c:170-172:
if (video->type == VIR_DOMAIN_VIDEO_TYPE_VHOST_USER) {
qemuExtVhostUserGPUStop(driver, def, video);
}
Curly brackets around single-line body:
src/qemu/qemu_vhost_user_gpu.c:185-187:
if (video->accel && video->accel->accel3d) {
virCommandAddArg(cmd, "--virgl");
}
maint.mk: incorrect formatting
make: *** [cfg.mk:1128: spacing-check] Error 1
real 10m44.405s
user 8m57.537s
sys 4m2.969s
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
participants (4)
-
Daniel P. Berrangé -
Ján Tomko -
marcandre.lureau@redhat.com -
no-reply@patchew.org