Devel
Threads by month
- ----- 2026 -----
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- 41 participants
- 40210 discussions
Re: [libvirt] [Qemu-devel] [PATCH v2 0/5] Removal of deprecated -no-kvm* options
by Thomas Huth 16 May '18
by Thomas Huth 16 May '18
16 May '18
On 07.05.2018 19:01, Paolo Bonzini wrote:
> On 07/05/2018 18:50, Markus Armbruster wrote:
>> Paolo Bonzini <pbonzini(a)redhat.com> writes:
>>
>>> On 07/05/2018 13:56, Markus Armbruster wrote:
>>>> Adding more and more ways to do the same stuff does not improve an
>>>> interface. Interface design needs to be *opinionated*. If we decide
>>>> -machine accel=tcg isn't a nice interface, by all means create a better
>>>> one, but as replacement[*], not as addition.
>>>>
>>>> Furthermore:
>>>>
>>>> tcg: add options for enabling MTTCG
>>>>
>>>> We know there will be cases where MTTCG won't work until additional work
>>>> is done in the front/back ends to support. It will however be useful to
>>>> be able to turn it on.
>>>>
>>>> As a result MTTCG will default to off unless the combination is
>>>> supported. However the user can turn it on for the sake of testing.
>>>>
>>>> Signed-off-by: KONRAD Frederic <fred.konrad(a)greensocs.com>
>>>> [AJB: move to -accel tcg,thread=multi|single, defaults]
>>>> Signed-off-by: Alex Bennée <alex.bennee(a)linaro.org>
>>>> Reviewed-by: Richard Henderson <rth(a)twiddle.net>
>>>>
>>>> I'm sorry, but this us sub-par. Yes, the commit is also about "enabling
>>>> MTTCG", but it also adds a new way to select accelerators, without ever
>>>> spelling that out. It should've been split, and properly described.
>>>
>>> Perhaps we can deprecate "-M accel" then, and also while we're at it
>>> move kernel_irqchip from -machine to "-accel kvm" where it belongs?
>>
>> Sounds good to me.
>
> Thomas, here's one for you! :)
I like the idea of deprecating "-machine accel=xxx" - but that will also
be a bigger change, since "-accel" is internally setting the accel
option of the machine again...
Also libvirt is still using "-machine accel=..." as far as I know, so
we've got to make sure that this gets changed there, too...
Thomas
1
0
A update on progress splitting libvirtd into multiple daemons....
* General refactoring of the RPC client/server
This is about allowing libvirtd daemon to forward API calls to
other daemons when there is no built-in driver. It also involves
the remote client learning how to connect to other daemons.
Working proof of concept which splits the secret driver into a
separate daemon is available:
https://www.redhat.com/archives/libvir-list/2018-April/msg01977.html
The storage driver, interface driver and nodedev drivers can
all also be split at this time. The nwfilter & network drivers
require some work before they can be split.
Still needs work around config files, and creating daemons for other
drivers. I'm not proposing to merge this until all drivers are ready.
I want to avoid a hybrid state where some drivers are split and some
are not as that will be confusing and make upgrade path harder.
Need to also consider if we'll mandate splitting of libvirtd, or
provide a compile time option to continue building a monolithic
driver. We'll probably need the latter for at least a few years
to avoid forcing a major architectural change on long-life distros
that like to rebase.
* Untangle storage driver from virt drivers
This involved more the storage file code into separate loadable modules.
This is merged and working
https://www.redhat.com/archives/libvir-list/2018-April/msg02423.html
* Untangle nwfilter driver from the virt drivers
This involved creating new public APIs to provide the concept of a filter
binding. This allows nwfilter driver to track all filters it has created.
The virt drivers only talk to the nwfilter driver via the public API
after this is done.
Latest patch series is here:
https://www.redhat.com/archives/libvir-list/2018-May/msg01145.html
A few loose ends and testing needed, but largely feature complete and
hopefully soon mergable
* Untangle network driver from virt driver
The virt drivers currently call into the network driver via a
back channel using callbacks, rather than the public API. We
will need to define some public APIs to allow creation and
deletion of "network ports" from the virt driver. This will
allow unprivilegd virt drivers to have real network access
via privileged network driver.
Also likely want to make the network driver responsible to
setting up network filters when this is done. ie the virt
driver will no longer directly use the nwfilter driver,
instead the network driver will talk to the nwfilter driver.
This will allow privileged network driver to enforce the
use of nwfilters when giving ports to unprivileged virt
drivers.
No work started, but this what I'll tackle now the nwfilter stuff
is largely wrapped up.
* Move host device tracking into the node dev driver
Currently we have a src/util/virhostdev.c file that tracks the
state of SCSI, SCIVHost PCI, MDev, USB devices that are assigned
to guests. This is part of the virt driver and needs to move into
the node device driver in some way. Principally this will allow
an unprivileged virt driver to use host devices via a privileged
nodedev driver.
Probably will involve creating some new virNodeDeviceXXXX APIs
to deal with the operations required. Unclear exactly what they
will look like, but need to be much simpler than the huge number
of APIs that are in virhostdev.h currently.
No work started, but Laine has indicated an interest in working
on it. If not, I'll work on it once network stuff is under control
With all the above done we'll be able to have many daemons, one per
driver, with split privilege levels.
The virt driver daemons, however, would still be monolithic. The step
after that would be to look at how to allow a launching VMs via a simple
shim daemon, that then associates with the main virt daemon. We had done
some POC demos around that in the past, with some positive results
https://www.redhat.com/archives/libvir-list/2017-December/msg00728.html
With the splitting of libvirtd, the need for a shim feels less urgent,
because the penalty of running one virtqemud per guest is lower than
the penalty of running one libvirtd per guest. None the less I still
think we want to try to build a shim, so that apps can directly connect
to the shim to run API operations, and just use the virtqemud for
central aggregation views. I'm not expecting todo anything on this
until the libvirtd is split, because that makes it easier todo the
shim without loosing functionality in the shim.
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 :|
1
0
[libvirt] [PATCH] tests: Update caps for QEMU 2.12.0 on s390x
by Shalini Chellathurai Saroja 16 May '18
by Shalini Chellathurai Saroja 16 May '18
16 May '18
Let us update the existing xml and replies files for QEMU 2.12.0 on
s390x.
Signed-off-by: Shalini Chellathurai Saroja <shalini(a)linux.vnet.ibm.com>
---
tests/domaincapsschemadata/qemu_2.12.0.s390x.xml | 99 +-
.../qemucapabilitiesdata/caps_2.12.0.s390x.replies | 5001 +++++++++++---------
tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 113 +-
3 files changed, 2974 insertions(+), 2239 deletions(-)
diff --git a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml b/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml
index 4bacb879fe..1475451e68 100644
--- a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml
+++ b/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml
@@ -22,8 +22,103 @@
</os>
<cpu>
<mode name='host-passthrough' supported='yes'/>
- <mode name='host-model' supported='no'/>
- <mode name='custom' supported='no'/>
+ <mode name='host-model' supported='yes'>
+ <model fallback='forbid'>z14-base</model>
+ <feature policy='require' name='aen'/>
+ <feature policy='require' name='aefsi'/>
+ <feature policy='require' name='msa8'/>
+ <feature policy='require' name='msa7'/>
+ <feature policy='require' name='msa6'/>
+ <feature policy='require' name='msa5'/>
+ <feature policy='require' name='msa4'/>
+ <feature policy='require' name='msa3'/>
+ <feature policy='require' name='msa2'/>
+ <feature policy='require' name='msa1'/>
+ <feature policy='require' name='sthyi'/>
+ <feature policy='require' name='edat'/>
+ <feature policy='require' name='ri'/>
+ <feature policy='require' name='edat2'/>
+ <feature policy='require' name='vx'/>
+ <feature policy='require' name='ipter'/>
+ <feature policy='require' name='vxeh'/>
+ <feature policy='require' name='vxpd'/>
+ <feature policy='require' name='esop'/>
+ <feature policy='require' name='iep'/>
+ <feature policy='require' name='cte'/>
+ <feature policy='require' name='gs'/>
+ <feature policy='require' name='ppa15'/>
+ <feature policy='require' name='zpci'/>
+ <feature policy='require' name='sea_esop2'/>
+ <feature policy='require' name='te'/>
+ <feature policy='require' name='cmm'/>
+ </mode>
+ <mode name='custom' supported='yes'>
+ <model usable='yes'>z890.2</model>
+ <model usable='yes'>z990.4</model>
+ <model usable='yes'>z10BC.2</model>
+ <model usable='yes'>z196.2</model>
+ <model usable='yes'>z14</model>
+ <model usable='yes'>z9BC-base</model>
+ <model usable='yes'>zEC12-base</model>
+ <model usable='yes'>z196-base</model>
+ <model usable='yes'>z13-base</model>
+ <model usable='yes'>z990.3</model>
+ <model usable='yes'>z9EC</model>
+ <model usable='yes'>zBC12</model>
+ <model usable='yes'>z9EC.3</model>
+ <model usable='yes'>z196.2-base</model>
+ <model usable='no'>qemu</model>
+ <model usable='yes'>zEC12.2-base</model>
+ <model usable='yes'>z800-base</model>
+ <model usable='yes'>z9EC.2</model>
+ <model usable='yes'>z900.2-base</model>
+ <model usable='yes'>z900.3</model>
+ <model usable='yes'>z890-base</model>
+ <model usable='yes'>z890</model>
+ <model usable='yes'>z990.4-base</model>
+ <model usable='yes'>z10BC.2-base</model>
+ <model usable='yes'>z900.2</model>
+ <model usable='yes'>z9BC.2-base</model>
+ <model usable='yes'>z800</model>
+ <model usable='yes'>z114</model>
+ <model usable='yes'>z13</model>
+ <model usable='yes'>z13s-base</model>
+ <model usable='yes'>z990</model>
+ <model usable='yes'>z990.2</model>
+ <model usable='yes'>z14-base</model>
+ <model usable='yes'>z890.2-base</model>
+ <model usable='yes'>z196</model>
+ <model usable='yes'>z10EC</model>
+ <model usable='yes'>z13s</model>
+ <model usable='yes'>z900</model>
+ <model usable='yes'>z10EC.3</model>
+ <model usable='yes'>z10EC.2-base</model>
+ <model usable='yes'>z114-base</model>
+ <model usable='yes'>z990.2-base</model>
+ <model usable='yes'>z9EC.2-base</model>
+ <model usable='yes'>z890.3</model>
+ <model usable='yes'>z900.3-base</model>
+ <model usable='yes'>z9BC.2</model>
+ <model usable='yes'>z10BC</model>
+ <model usable='yes'>z990.5</model>
+ <model usable='yes'>zEC12.2</model>
+ <model usable='yes'>z10EC-base</model>
+ <model usable='yes'>z9EC-base</model>
+ <model usable='yes'>z9EC.3-base</model>
+ <model usable='yes'>zEC12</model>
+ <model usable='yes'>z990.5-base</model>
+ <model usable='yes'>z10BC-base</model>
+ <model usable='yes'>z900-base</model>
+ <model usable='yes'>z13.2</model>
+ <model usable='yes'>z890.3-base</model>
+ <model usable='yes'>zBC12-base</model>
+ <model usable='yes'>z13.2-base</model>
+ <model usable='yes'>z990-base</model>
+ <model usable='yes'>z10EC.2</model>
+ <model usable='yes'>z9BC</model>
+ <model usable='yes'>z10EC.3-base</model>
+ <model usable='yes'>z990.3-base</model>
+ </mode>
</cpu>
<devices>
<disk supported='yes'>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
index a93e5984c6..29c3403550 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.replies
@@ -2,14 +2,13 @@
"QMP": {
"version": {
"qemu": {
- "micro": 90,
- "minor": 11,
+ "micro": 0,
+ "minor": 12,
"major": 2
},
- "package": "v2.12.0-rc0"
+ "package": ""
},
"capabilities": [
- "oob"
]
}
}
@@ -23,11 +22,11 @@
{
"return": {
"qemu": {
- "micro": 90,
- "minor": 11,
+ "micro": 0,
+ "minor": 12,
"major": 2
},
- "package": "v2.12.0-rc0"
+ "package": ""
},
"id": "libvirt-2"
}
@@ -530,7 +529,7 @@
{
"return": {
- "fd": 17,
+ "fd": 18,
"fdset-id": 0
},
"id": "libvirt-5"
@@ -546,7 +545,7 @@
{
"return": {
- "enabled": false,
+ "enabled": true,
"present": true
},
"id": "libvirt-7"
@@ -1241,10 +1240,6 @@
"name": "fw_cfg_io",
"parent": "fw_cfg"
},
- {
- "name": "chardev-file",
- "parent": "chardev-fd"
- },
{
"name": "s390-ccw-virtio-2.10-machine",
"parent": "s390-ccw-machine"
@@ -1258,8 +1253,8 @@
"parent": "s390x-cpu"
},
{
- "name": "chardev-braille",
- "parent": "chardev"
+ "name": "chardev-file",
+ "parent": "chardev-fd"
},
{
"name": "chardev-wctablet",
@@ -2904,102 +2899,93 @@
{
"return": [
{
- "name": "serial",
- "type": "str"
- },
- {
- "name": "port_index",
+ "name": "min_io_size",
"type": "uint16"
},
{
- "name": "dpofua",
+ "name": "removable",
"description": "on/off",
"type": "bool"
},
{
- "name": "bootindex",
- "type": "int32"
- },
- {
- "name": "logical_block_size",
- "description": "A power of two between 512 and 32768",
- "type": "uint16"
+ "name": "channel",
+ "type": "uint32"
},
{
- "name": "discard_granularity",
- "type": "uint32"
+ "name": "serial",
+ "type": "str"
},
{
"name": "lun",
"type": "uint32"
},
{
- "name": "max_unmap_size",
- "type": "uint64"
+ "name": "dpofua",
+ "description": "on/off",
+ "type": "bool"
},
{
- "name": "drive",
- "description": "Node name or ID of a block device to use as a backend",
+ "name": "ver",
"type": "str"
},
{
- "name": "port_wwn",
- "type": "uint64"
- },
- {
- "name": "write-cache",
- "description": "on/off/auto",
- "type": "OnOffAuto"
- },
- {
- "name": "share-rw",
- "type": "bool"
- },
- {
- "name": "opt_io_size",
+ "name": "scsi-id",
"type": "uint32"
},
{
- "name": "min_io_size",
+ "name": "logical_block_size",
+ "description": "A power of two between 512 and 32768",
"type": "uint16"
},
{
- "name": "product",
+ "name": "drive",
+ "description": "Node name or ID of a block device to use as a backend",
"type": "str"
},
{
- "name": "scsi-id",
- "type": "uint32"
+ "name": "scsi_version",
+ "type": "int32"
},
{
- "name": "channel",
+ "name": "werror",
+ "description": "Error handling policy, report/ignore/enospc/stop/auto",
+ "type": "BlockdevOnError"
+ },
+ {
+ "name": "discard_granularity",
"type": "uint32"
},
{
- "name": "vendor",
- "type": "str"
+ "name": "port_wwn",
+ "type": "uint64"
},
{
- "name": "wwn",
+ "name": "max_unmap_size",
"type": "uint64"
},
{
- "name": "werror",
+ "name": "rerror",
"description": "Error handling policy, report/ignore/enospc/stop/auto",
"type": "BlockdevOnError"
},
{
- "name": "removable",
- "description": "on/off",
+ "name": "max_io_size",
+ "type": "uint64"
+ },
+ {
+ "name": "wwn",
+ "type": "uint64"
+ },
+ {
+ "name": "share-rw",
"type": "bool"
},
{
- "name": "rerror",
- "description": "Error handling policy, report/ignore/enospc/stop/auto",
- "type": "BlockdevOnError"
+ "name": "product",
+ "type": "str"
},
{
- "name": "ver",
+ "name": "vendor",
"type": "str"
},
{
@@ -3008,8 +2994,21 @@
"type": "uint16"
},
{
- "name": "max_io_size",
- "type": "uint64"
+ "name": "port_index",
+ "type": "uint16"
+ },
+ {
+ "name": "bootindex",
+ "type": "int32"
+ },
+ {
+ "name": "write-cache",
+ "description": "on/off/auto",
+ "type": "OnOffAuto"
+ },
+ {
+ "name": "opt_io_size",
+ "type": "uint32"
}
],
"id": "libvirt-20"
@@ -3747,18 +3746,6 @@
"name": "z890.2",
"typename": "z890.2-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -3767,18 +3754,6 @@
"name": "z990.4",
"typename": "z990.4-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -3787,32 +3762,6 @@
"name": "z10BC.2",
"typename": "z10BC.2-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -3821,122 +3770,6 @@
"name": "z196.2",
"typename": "z196.2-s390x-cpu",
"unavailable-features": [
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "aefsi",
- "sthyi",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -3945,152 +3778,6 @@
"name": "z14",
"typename": "z14-s390x-cpu",
"unavailable-features": [
- "kma-gcm-eaes-256",
- "kma-gcm-eaes-192",
- "kma-gcm-eaes-128",
- "kma-gcm-aes-256",
- "kma-gcm-aes-192",
- "kma-gcm-aes-128",
- "ppno-sha-512-drng",
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "msa8-base",
- "vxeh",
- "vxpd",
- "gs",
- "sea_esop2",
- "iep",
- "vx",
- "dfppc",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "tsi",
- "sema",
- "minste2",
- "eec",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "opc",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa7",
- "msa6",
- "msa2",
- "msa1",
- "gen13ptff",
- "tods",
- "type"
],
"static": false,
"migration-safe": true
@@ -4099,22 +3786,6 @@
"name": "z9BC-base",
"typename": "z9BC-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "hfpue",
- "hfpm",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4123,32 +3794,6 @@
"name": "zEC12-base",
"typename": "zEC12-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4157,31 +3802,6 @@
"name": "z196-base",
"typename": "z196-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4190,35 +3810,6 @@
"name": "z13-base",
"typename": "z13-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfppc",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "gen13ptff",
- "tods",
- "type"
],
"static": true,
"migration-safe": true
@@ -4227,18 +3818,6 @@
"name": "z990.3",
"typename": "z990.3-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -4246,6 +3825,8 @@
{
"name": "host",
"typename": "host-s390x-cpu",
+ "unavailable-features": [
+ ],
"static": false,
"migration-safe": false
},
@@ -4253,25 +3834,6 @@
"name": "z9EC",
"typename": "z9EC-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "hfpue",
- "hfpm",
- "asnlxr",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -4280,129 +3842,6 @@
"name": "zBC12",
"typename": "zBC12-s390x-cpu",
"unavailable-features": [
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "sea_esop2",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -4411,25 +3850,6 @@
"name": "z9EC.3",
"typename": "z9EC.3-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "hfpue",
- "hfpm",
- "asnlxr",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -4438,31 +3858,6 @@
"name": "z196.2-base",
"typename": "z196.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4471,6 +3866,7 @@
"name": "qemu",
"typename": "qemu-s390x-cpu",
"unavailable-features": [
+ "ais"
],
"static": false,
"migration-safe": true
@@ -4479,32 +3875,6 @@
"name": "zEC12.2-base",
"typename": "zEC12.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4521,25 +3891,6 @@
"name": "z9EC.2",
"typename": "z9EC.2-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "hfpue",
- "hfpm",
- "asnlxr",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -4564,18 +3915,6 @@
"name": "z890-base",
"typename": "z890-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -4584,18 +3923,6 @@
"name": "z890",
"typename": "z890-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -4604,18 +3931,6 @@
"name": "z990.4-base",
"typename": "z990.4-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -4624,27 +3939,6 @@
"name": "z10BC.2-base",
"typename": "z10BC.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4661,22 +3955,6 @@
"name": "z9BC.2-base",
"typename": "z9BC.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "hfpue",
- "hfpm",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -4693,122 +3971,6 @@
"name": "z114",
"typename": "z114-s390x-cpu",
"unavailable-features": [
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "aefsi",
- "sthyi",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -4817,134 +3979,6 @@
"name": "z13",
"typename": "z13-s390x-cpu",
"unavailable-features": [
- "ppno-sha-512-drng",
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "sea_esop2",
- "vx",
- "dfppc",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "gen13ptff",
- "tods",
- "type"
],
"static": false,
"migration-safe": true
@@ -4953,35 +3987,6 @@
"name": "z13s-base",
"typename": "z13s-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfppc",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "gen13ptff",
- "tods",
- "type"
],
"static": true,
"migration-safe": true
@@ -4990,18 +3995,6 @@
"name": "z990",
"typename": "z990-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -5010,18 +4003,6 @@
"name": "z990.2",
"typename": "z990.2-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -5030,40 +4011,6 @@
"name": "z14-base",
"typename": "z14-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfppc",
- "tsi",
- "sema",
- "minste2",
- "eec",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "opc",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "gen13ptff",
- "tods",
- "type"
],
"static": true,
"migration-safe": true
@@ -5072,18 +4019,6 @@
"name": "z890.2-base",
"typename": "z890.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -5092,122 +4027,6 @@
"name": "z196",
"typename": "z196-s390x-cpu",
"unavailable-features": [
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "aefsi",
- "sthyi",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5216,32 +4035,6 @@
"name": "z10EC",
"typename": "z10EC-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5250,134 +4043,6 @@
"name": "z13s",
"typename": "z13s-s390x-cpu",
"unavailable-features": [
- "ppno-sha-512-drng",
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "sea_esop2",
- "vx",
- "dfppc",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "gen13ptff",
- "tods",
- "type"
],
"static": false,
"migration-safe": true
@@ -5394,32 +4059,6 @@
"name": "z10EC.3",
"typename": "z10EC.3-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5428,27 +4067,6 @@
"name": "z10EC.2-base",
"typename": "z10EC.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -5457,31 +4075,6 @@
"name": "z114-base",
"typename": "z114-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -5490,18 +4083,6 @@
"name": "z990.2-base",
"typename": "z990.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -5510,22 +4091,6 @@
"name": "z9EC.2-base",
"typename": "z9EC.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "hfpue",
- "hfpm",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -5534,18 +4099,6 @@
"name": "z890.3",
"typename": "z890.3-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -5562,25 +4115,6 @@
"name": "z9BC.2",
"typename": "z9BC.2-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "hfpue",
- "hfpm",
- "asnlxr",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5589,32 +4123,6 @@
"name": "z10BC",
"typename": "z10BC-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5623,18 +4131,6 @@
"name": "z990.5",
"typename": "z990.5-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": false,
"migration-safe": true
@@ -5643,129 +4139,6 @@
"name": "zEC12.2",
"typename": "zEC12.2-s390x-cpu",
"unavailable-features": [
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "sea_esop2",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5774,27 +4147,6 @@
"name": "z10EC-base",
"typename": "z10EC-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -5803,22 +4155,6 @@
"name": "z9EC-base",
"typename": "z9EC-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "hfpue",
- "hfpm",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -5827,22 +4163,6 @@
"name": "z9EC.3-base",
"typename": "z9EC.3-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "hfpue",
- "hfpm",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -5851,129 +4171,6 @@
"name": "zEC12",
"typename": "zEC12-s390x-cpu",
"unavailable-features": [
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "sea_esop2",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -5982,18 +4179,6 @@
"name": "z990.5-base",
"typename": "z990.5-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -6002,27 +4187,6 @@
"name": "z10BC-base",
"typename": "z10BC-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -6039,134 +4203,6 @@
"name": "z13.2",
"typename": "z13.2-s390x-cpu",
"unavailable-features": [
- "ppno-sha-512-drng",
- "pcc-xts-eaes-256",
- "pcc-xts-eaes-128",
- "pcc-xts-aes-256",
- "pcc-xts-aes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-eaes-192",
- "pcc-cmac-eaes-128",
- "pcc-cmac-eaes-256",
- "pcc-cmac-aes-192",
- "pcc-cmac-aes-128",
- "pcc-cmac-etdea-192",
- "pcc-cmac-etdea-128",
- "pcc-cmac-edea",
- "pcc-cmac-tdea-192",
- "pcc-cmac-tdea-128",
- "pcc-cmac-dea",
- "kmo-eaes-256",
- "kmo-eaes-192",
- "kmo-eaes-128",
- "kmo-aes-256",
- "kmo-aes-192",
- "kmo-aes-128",
- "kmo-etdea-192",
- "kmo-etdea-128",
- "kmo-edea",
- "kmo-tdea-192",
- "kmo-tdea-128",
- "kmo-dea",
- "kmf-eaes-256",
- "kmf-eaes-192",
- "kmf-eaes-128",
- "kmf-aes-256",
- "kmf-aes-192",
- "kmf-aes-128",
- "kmf-etdea-192",
- "kmf-etdea-128",
- "kmf-edea",
- "kmf-tdea-192",
- "kmf-tdea-128",
- "kmf-dea",
- "kmctr-eaes-256",
- "kmctr-eaes-192",
- "kmctr-eaes-128",
- "kmctr-aes-256",
- "kmctr-aes-192",
- "kmctr-aes-128",
- "kmctr-etdea-192",
- "kmctr-etdea-128",
- "kmctr-edea",
- "kmctr-tdea-192",
- "kmctr-tdea-128",
- "kmctr-dea",
- "pckmo-aes-256",
- "pckmo-aes-192",
- "pckmo-aes-128",
- "pckmo-etdea-192",
- "pckmo-etdea-128",
- "pckmo-edea",
- "klmd-sha-1",
- "kimd-ghash",
- "kimd-sha-1",
- "km-xts-eaes-256",
- "km-xts-eaes-128",
- "km-xts-aes-256",
- "km-xts-aes-128",
- "km-eaes-256",
- "km-eaes-192",
- "km-eaes-128",
- "km-etdea-192",
- "km-etdea-128",
- "km-edea",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-eaes-256",
- "kmc-eaes-192",
- "kmc-eaes-128",
- "kmc-etdea-192",
- "kmc-etdea-128",
- "kmc-edea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-eaes-256",
- "kmac-eaes-192",
- "kmac-eaes-128",
- "kmac-aes-256",
- "kmac-aes-192",
- "kmac-aes-128",
- "kmac-etdea-192",
- "kmac-etdea-128",
- "kmac-edea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "esop",
- "sea_esop2",
- "vx",
- "dfppc",
- "edat2",
- "aefsi",
- "sthyi",
- "te",
- "ri",
- "cte",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "ipter",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "gen13ptff",
- "tods",
- "type"
],
"static": false,
"migration-safe": true
@@ -6175,18 +4211,6 @@
"name": "z890.3-base",
"typename": "z890.3-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -6195,32 +4219,6 @@
"name": "zBC12-base",
"typename": "zBC12-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -6229,35 +4227,6 @@
"name": "z13.2-base",
"typename": "z13.2-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "dfppc",
- "dfpzc",
- "cmpsceh",
- "pfpo",
- "dfphp",
- "dfp",
- "fpe",
- "emon",
- "parseh",
- "hfpue",
- "hfpm",
- "nonqks",
- "csske",
- "asnlxr",
- "gen13ptff",
- "tods",
- "type"
],
"static": true,
"migration-safe": true
@@ -6266,18 +4235,6 @@
"name": "z990-base",
"typename": "z990-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -6286,32 +4243,6 @@
"name": "z10EC.2",
"typename": "z10EC.2-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "edat",
- "asnlxr",
- "msa2",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -6320,25 +4251,6 @@
"name": "z9BC",
"typename": "z9BC-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "cmm",
- "dateh2",
- "sthyi",
- "hfpue",
- "hfpm",
- "asnlxr",
- "msa1",
- "tods"
],
"static": false,
"migration-safe": true
@@ -6347,27 +4259,6 @@
"name": "z10EC.3-base",
"typename": "z10EC.3-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "dateh2",
- "pfpo",
- "dfphp",
- "dfp",
- "parseh",
- "hfpue",
- "hfpm",
- "csske",
- "asnlxr",
- "tods"
],
"static": true,
"migration-safe": true
@@ -6376,18 +4267,6 @@
"name": "z990.3-base",
"typename": "z990.3-base-s390x-cpu",
"unavailable-features": [
- "klmd-sha-1",
- "kimd-sha-1",
- "km-tdea-192",
- "km-tdea-128",
- "km-dea",
- "kmc-tdea-192",
- "kmc-tdea-128",
- "kmc-dea",
- "kmac-tdea-192",
- "kmac-tdea-128",
- "kmac-dea",
- "hfpm"
],
"static": true,
"migration-safe": true
@@ -6411,41 +4290,6 @@
{
"return": [
- {
- "parameters": [
- {
- "name": "timeout",
- "help": "Request timeout in seconds (default 0 = no timeout)",
- "type": "number"
- },
- {
- "name": "initiator-name",
- "help": "Initiator iqn name to use when connecting",
- "type": "string"
- },
- {
- "name": "header-digest",
- "help": "HeaderDigest setting. {CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
- "type": "string"
- },
- {
- "name": "password-secret",
- "help": "ID of the secret providing password for CHAP authentication to target",
- "type": "string"
- },
- {
- "name": "password",
- "help": "password for CHAP authentication to target",
- "type": "string"
- },
- {
- "name": "user",
- "help": "username for CHAP authentication to target",
- "type": "string"
- }
- ],
- "option": "iscsi"
- },
{
"parameters": [
{
@@ -7107,6 +4951,10 @@
},
{
"parameters": [
+ {
+ "name": "x-oob",
+ "type": "boolean"
+ },
{
"name": "pretty",
"type": "boolean"
@@ -15253,9 +13101,9 @@
"type": "int"
},
{
- "name": "static",
+ "name": "preallocation",
"default": null,
- "type": "bool"
+ "type": "356"
}
],
"meta-type": "object"
@@ -18996,7 +16844,2708 @@
}
{
- "id": "libvirt-44",
+ "return": {
+ "model": {
+ "name": "z14-base",
+ "props": {
+ "aen": true,
+ "aefsi": true,
+ "msa8": true,
+ "msa7": true,
+ "msa6": true,
+ "msa5": true,
+ "msa4": true,
+ "msa3": true,
+ "msa2": true,
+ "msa1": true,
+ "sthyi": true,
+ "edat": true,
+ "ri": true,
+ "edat2": true,
+ "vx": true,
+ "ipter": true,
+ "vxeh": true,
+ "vxpd": true,
+ "esop": true,
+ "iep": true,
+ "cte": true,
+ "gs": true,
+ "ppa15": true,
+ "zpci": true,
+ "sea_esop2": true,
+ "te": true,
+ "cmm": true
+ }
+ }
+ },
+ "id": "libvirt-44"
+}
+
+{
+ "id": "libvirt-45",
+ "error": {
+ "class": "GenericError",
+ "desc": "Property '.migratable' not found"
+ }
+}
+
+{
+ "return": {
+ },
+ "id": "libvirt-1"
+}
+
+{
+ "return": [
+ {
+ "name": "z890.2",
+ "typename": "z890.2-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.4",
+ "typename": "z990.4-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10BC.2",
+ "typename": "z10BC.2-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z196.2",
+ "typename": "z196.2-s390x-cpu",
+ "unavailable-features": [
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "aefsi",
+ "sthyi",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z14",
+ "typename": "z14-s390x-cpu",
+ "unavailable-features": [
+ "ppno-sha-512-drng",
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "vxeh",
+ "vxpd",
+ "gs",
+ "sea_esop2",
+ "iep",
+ "vx",
+ "dfppc",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "tsi",
+ "sema",
+ "minste2",
+ "eec",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "opc",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa8",
+ "msa7",
+ "msa6",
+ "msa2",
+ "msa1",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z9BC-base",
+ "typename": "z9BC-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "zEC12-base",
+ "typename": "zEC12-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z196-base",
+ "typename": "z196-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z13-base",
+ "typename": "z13-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfppc",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.3",
+ "typename": "z990.3-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "host",
+ "typename": "host-s390x-cpu",
+ "static": false,
+ "migration-safe": false
+ },
+ {
+ "name": "z9EC",
+ "typename": "z9EC-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "zBC12",
+ "typename": "zBC12-s390x-cpu",
+ "unavailable-features": [
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "sea_esop2",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z9EC.3",
+ "typename": "z9EC.3-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z196.2-base",
+ "typename": "z196.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "qemu",
+ "typename": "qemu-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "zEC12.2-base",
+ "typename": "zEC12.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z800-base",
+ "typename": "z800-base-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z9EC.2",
+ "typename": "z9EC.2-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z900.2-base",
+ "typename": "z900.2-base-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z900.3",
+ "typename": "z900.3-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z890-base",
+ "typename": "z890-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z890",
+ "typename": "z890-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.4-base",
+ "typename": "z990.4-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z10BC.2-base",
+ "typename": "z10BC.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z900.2",
+ "typename": "z900.2-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z9BC.2-base",
+ "typename": "z9BC.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z800",
+ "typename": "z800-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z114",
+ "typename": "z114-s390x-cpu",
+ "unavailable-features": [
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "aefsi",
+ "sthyi",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z13",
+ "typename": "z13-s390x-cpu",
+ "unavailable-features": [
+ "ppno-sha-512-drng",
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "sea_esop2",
+ "vx",
+ "dfppc",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z13s-base",
+ "typename": "z13s-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfppc",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z990",
+ "typename": "z990-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.2",
+ "typename": "z990.2-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z14-base",
+ "typename": "z14-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfppc",
+ "tsi",
+ "sema",
+ "minste2",
+ "eec",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "opc",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z890.2-base",
+ "typename": "z890.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z196",
+ "typename": "z196-s390x-cpu",
+ "unavailable-features": [
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "aefsi",
+ "sthyi",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10EC",
+ "typename": "z10EC-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z13s",
+ "typename": "z13s-s390x-cpu",
+ "unavailable-features": [
+ "ppno-sha-512-drng",
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "sea_esop2",
+ "vx",
+ "dfppc",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z900",
+ "typename": "z900-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10EC.3",
+ "typename": "z10EC.3-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10EC.2-base",
+ "typename": "z10EC.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z114-base",
+ "typename": "z114-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.2-base",
+ "typename": "z990.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z9EC.2-base",
+ "typename": "z9EC.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z890.3",
+ "typename": "z890.3-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z900.3-base",
+ "typename": "z900.3-base-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z9BC.2",
+ "typename": "z9BC.2-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10BC",
+ "typename": "z10BC-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.5",
+ "typename": "z990.5-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "zEC12.2",
+ "typename": "zEC12.2-s390x-cpu",
+ "unavailable-features": [
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "sea_esop2",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10EC-base",
+ "typename": "z10EC-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z9EC-base",
+ "typename": "z9EC-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z9EC.3-base",
+ "typename": "z9EC.3-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "zEC12",
+ "typename": "zEC12-s390x-cpu",
+ "unavailable-features": [
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "sea_esop2",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.5-base",
+ "typename": "z990.5-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z10BC-base",
+ "typename": "z10BC-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z900-base",
+ "typename": "z900-base-s390x-cpu",
+ "unavailable-features": [
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z13.2",
+ "typename": "z13.2-s390x-cpu",
+ "unavailable-features": [
+ "ppno-sha-512-drng",
+ "pcc-xts-eaes-256",
+ "pcc-xts-eaes-128",
+ "pcc-xts-aes-256",
+ "pcc-xts-aes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-eaes-192",
+ "pcc-cmac-eaes-128",
+ "pcc-cmac-eaes-256",
+ "pcc-cmac-aes-192",
+ "pcc-cmac-aes-128",
+ "pcc-cmac-etdea-192",
+ "pcc-cmac-etdea-128",
+ "pcc-cmac-edea",
+ "pcc-cmac-tdea-192",
+ "pcc-cmac-tdea-128",
+ "pcc-cmac-dea",
+ "kmo-eaes-256",
+ "kmo-eaes-192",
+ "kmo-eaes-128",
+ "kmo-aes-256",
+ "kmo-aes-192",
+ "kmo-aes-128",
+ "kmo-etdea-192",
+ "kmo-etdea-128",
+ "kmo-edea",
+ "kmo-tdea-192",
+ "kmo-tdea-128",
+ "kmo-dea",
+ "kmf-eaes-256",
+ "kmf-eaes-192",
+ "kmf-eaes-128",
+ "kmf-aes-256",
+ "kmf-aes-192",
+ "kmf-aes-128",
+ "kmf-etdea-192",
+ "kmf-etdea-128",
+ "kmf-edea",
+ "kmf-tdea-192",
+ "kmf-tdea-128",
+ "kmf-dea",
+ "kmctr-eaes-256",
+ "kmctr-eaes-192",
+ "kmctr-eaes-128",
+ "kmctr-aes-256",
+ "kmctr-aes-192",
+ "kmctr-aes-128",
+ "kmctr-etdea-192",
+ "kmctr-etdea-128",
+ "kmctr-edea",
+ "kmctr-tdea-192",
+ "kmctr-tdea-128",
+ "kmctr-dea",
+ "pckmo-aes-256",
+ "pckmo-aes-192",
+ "pckmo-aes-128",
+ "pckmo-etdea-192",
+ "pckmo-etdea-128",
+ "pckmo-edea",
+ "klmd-sha-1",
+ "kimd-ghash",
+ "kimd-sha-1",
+ "km-xts-eaes-256",
+ "km-xts-eaes-128",
+ "km-xts-aes-256",
+ "km-xts-aes-128",
+ "km-eaes-256",
+ "km-eaes-192",
+ "km-eaes-128",
+ "km-etdea-192",
+ "km-etdea-128",
+ "km-edea",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-eaes-256",
+ "kmc-eaes-192",
+ "kmc-eaes-128",
+ "kmc-etdea-192",
+ "kmc-etdea-128",
+ "kmc-edea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-eaes-256",
+ "kmac-eaes-192",
+ "kmac-eaes-128",
+ "kmac-aes-256",
+ "kmac-aes-192",
+ "kmac-aes-128",
+ "kmac-etdea-192",
+ "kmac-etdea-128",
+ "kmac-edea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "esop",
+ "sea_esop2",
+ "vx",
+ "dfppc",
+ "edat2",
+ "aefsi",
+ "sthyi",
+ "te",
+ "ri",
+ "cte",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "ipter",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z890.3-base",
+ "typename": "z890.3-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "zBC12-base",
+ "typename": "zBC12-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z13.2-base",
+ "typename": "z13.2-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "dfppc",
+ "dfpzc",
+ "cmpsceh",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "fpe",
+ "emon",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "nonqks",
+ "csske",
+ "asnlxr",
+ "gen13ptff",
+ "tods",
+ "type"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z990-base",
+ "typename": "z990-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z10EC.2",
+ "typename": "z10EC.2-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "edat",
+ "asnlxr",
+ "msa2",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z9BC",
+ "typename": "z9BC-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "cmm",
+ "dateh2",
+ "sthyi",
+ "hfpue",
+ "hfpm",
+ "asnlxr",
+ "msa1",
+ "tods"
+ ],
+ "static": false,
+ "migration-safe": true
+ },
+ {
+ "name": "z10EC.3-base",
+ "typename": "z10EC.3-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "dateh2",
+ "pfpo",
+ "dfphp",
+ "dfp",
+ "parseh",
+ "hfpue",
+ "hfpm",
+ "csske",
+ "asnlxr",
+ "tods"
+ ],
+ "static": true,
+ "migration-safe": true
+ },
+ {
+ "name": "z990.3-base",
+ "typename": "z990.3-base-s390x-cpu",
+ "unavailable-features": [
+ "klmd-sha-1",
+ "kimd-sha-1",
+ "km-tdea-192",
+ "km-tdea-128",
+ "km-dea",
+ "kmc-tdea-192",
+ "kmc-tdea-128",
+ "kmc-dea",
+ "kmac-tdea-192",
+ "kmac-tdea-128",
+ "kmac-dea",
+ "hfpm"
+ ],
+ "static": true,
+ "migration-safe": true
+ }
+ ],
+ "id": "libvirt-2"
+}
+
+{
+ "id": "libvirt-3",
"error": {
"class": "GenericError",
"desc": "The CPU definition 'max' is unknown."
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
index 607274ebb7..c486340c7d 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
@@ -3,7 +3,7 @@
<selfctime>0</selfctime>
<selfvers>0</selfvers>
<usedQMP/>
- <flag name='enable-kvm'/>
+ <flag name='kvm'/>
<flag name='boot-index'/>
<flag name='virtio-tx-alg'/>
<flag name='virtio-blk-pci.ioeventfd'/>
@@ -126,11 +126,108 @@
<flag name='virtual-css-bridge'/>
<flag name='virtual-css-bridge.cssid-unrestricted'/>
<flag name='vfio-ccw'/>
- <version>2011090</version>
+ <version>2012000</version>
<kvmVersion>0</kvmVersion>
- <microcodeVersion>0</microcodeVersion>
- <package>v2.12.0-rc0</package>
+ <microcodeVersion>371055</microcodeVersion>
+ <package></package>
<arch>s390x</arch>
+ <hostCPU type='kvm' model='z14-base' migratability='no'>
+ <property name='aen' type='boolean' value='true'/>
+ <property name='aefsi' type='boolean' value='true'/>
+ <property name='msa8' type='boolean' value='true'/>
+ <property name='msa7' type='boolean' value='true'/>
+ <property name='msa6' type='boolean' value='true'/>
+ <property name='msa5' type='boolean' value='true'/>
+ <property name='msa4' type='boolean' value='true'/>
+ <property name='msa3' type='boolean' value='true'/>
+ <property name='msa2' type='boolean' value='true'/>
+ <property name='msa1' type='boolean' value='true'/>
+ <property name='sthyi' type='boolean' value='true'/>
+ <property name='edat' type='boolean' value='true'/>
+ <property name='ri' type='boolean' value='true'/>
+ <property name='edat2' type='boolean' value='true'/>
+ <property name='vx' type='boolean' value='true'/>
+ <property name='ipter' type='boolean' value='true'/>
+ <property name='vxeh' type='boolean' value='true'/>
+ <property name='vxpd' type='boolean' value='true'/>
+ <property name='esop' type='boolean' value='true'/>
+ <property name='iep' type='boolean' value='true'/>
+ <property name='cte' type='boolean' value='true'/>
+ <property name='gs' type='boolean' value='true'/>
+ <property name='ppa15' type='boolean' value='true'/>
+ <property name='zpci' type='boolean' value='true'/>
+ <property name='sea_esop2' type='boolean' value='true'/>
+ <property name='te' type='boolean' value='true'/>
+ <property name='cmm' type='boolean' value='true'/>
+ </hostCPU>
+ <cpu type='kvm' name='z890.2' usable='yes'/>
+ <cpu type='kvm' name='z990.4' usable='yes'/>
+ <cpu type='kvm' name='z10BC.2' usable='yes'/>
+ <cpu type='kvm' name='z196.2' usable='yes'/>
+ <cpu type='kvm' name='z14' usable='yes'/>
+ <cpu type='kvm' name='z9BC-base' usable='yes'/>
+ <cpu type='kvm' name='zEC12-base' usable='yes'/>
+ <cpu type='kvm' name='z196-base' usable='yes'/>
+ <cpu type='kvm' name='z13-base' usable='yes'/>
+ <cpu type='kvm' name='z990.3' usable='yes'/>
+ <cpu type='kvm' name='host' usable='yes'/>
+ <cpu type='kvm' name='z9EC' usable='yes'/>
+ <cpu type='kvm' name='zBC12' usable='yes'/>
+ <cpu type='kvm' name='z9EC.3' usable='yes'/>
+ <cpu type='kvm' name='z196.2-base' usable='yes'/>
+ <cpu type='kvm' name='qemu' usable='no'>
+ <blocker name='ais'/>
+ </cpu>
+ <cpu type='kvm' name='zEC12.2-base' usable='yes'/>
+ <cpu type='kvm' name='z800-base' usable='yes'/>
+ <cpu type='kvm' name='z9EC.2' usable='yes'/>
+ <cpu type='kvm' name='z900.2-base' usable='yes'/>
+ <cpu type='kvm' name='z900.3' usable='yes'/>
+ <cpu type='kvm' name='z890-base' usable='yes'/>
+ <cpu type='kvm' name='z890' usable='yes'/>
+ <cpu type='kvm' name='z990.4-base' usable='yes'/>
+ <cpu type='kvm' name='z10BC.2-base' usable='yes'/>
+ <cpu type='kvm' name='z900.2' usable='yes'/>
+ <cpu type='kvm' name='z9BC.2-base' usable='yes'/>
+ <cpu type='kvm' name='z800' usable='yes'/>
+ <cpu type='kvm' name='z114' usable='yes'/>
+ <cpu type='kvm' name='z13' usable='yes'/>
+ <cpu type='kvm' name='z13s-base' usable='yes'/>
+ <cpu type='kvm' name='z990' usable='yes'/>
+ <cpu type='kvm' name='z990.2' usable='yes'/>
+ <cpu type='kvm' name='z14-base' usable='yes'/>
+ <cpu type='kvm' name='z890.2-base' usable='yes'/>
+ <cpu type='kvm' name='z196' usable='yes'/>
+ <cpu type='kvm' name='z10EC' usable='yes'/>
+ <cpu type='kvm' name='z13s' usable='yes'/>
+ <cpu type='kvm' name='z900' usable='yes'/>
+ <cpu type='kvm' name='z10EC.3' usable='yes'/>
+ <cpu type='kvm' name='z10EC.2-base' usable='yes'/>
+ <cpu type='kvm' name='z114-base' usable='yes'/>
+ <cpu type='kvm' name='z990.2-base' usable='yes'/>
+ <cpu type='kvm' name='z9EC.2-base' usable='yes'/>
+ <cpu type='kvm' name='z890.3' usable='yes'/>
+ <cpu type='kvm' name='z900.3-base' usable='yes'/>
+ <cpu type='kvm' name='z9BC.2' usable='yes'/>
+ <cpu type='kvm' name='z10BC' usable='yes'/>
+ <cpu type='kvm' name='z990.5' usable='yes'/>
+ <cpu type='kvm' name='zEC12.2' usable='yes'/>
+ <cpu type='kvm' name='z10EC-base' usable='yes'/>
+ <cpu type='kvm' name='z9EC-base' usable='yes'/>
+ <cpu type='kvm' name='z9EC.3-base' usable='yes'/>
+ <cpu type='kvm' name='zEC12' usable='yes'/>
+ <cpu type='kvm' name='z990.5-base' usable='yes'/>
+ <cpu type='kvm' name='z10BC-base' usable='yes'/>
+ <cpu type='kvm' name='z900-base' usable='yes'/>
+ <cpu type='kvm' name='z13.2' usable='yes'/>
+ <cpu type='kvm' name='z890.3-base' usable='yes'/>
+ <cpu type='kvm' name='zBC12-base' usable='yes'/>
+ <cpu type='kvm' name='z13.2-base' usable='yes'/>
+ <cpu type='kvm' name='z990-base' usable='yes'/>
+ <cpu type='kvm' name='z10EC.2' usable='yes'/>
+ <cpu type='kvm' name='z9BC' usable='yes'/>
+ <cpu type='kvm' name='z10EC.3-base' usable='yes'/>
+ <cpu type='kvm' name='z990.3-base' usable='yes'/>
<cpu type='tcg' name='z890.2' usable='no'>
<blocker name='klmd-sha-1'/>
<blocker name='kimd-sha-1'/>
@@ -306,12 +403,6 @@
<blocker name='tods'/>
</cpu>
<cpu type='tcg' name='z14' usable='no'>
- <blocker name='kma-gcm-eaes-256'/>
- <blocker name='kma-gcm-eaes-192'/>
- <blocker name='kma-gcm-eaes-128'/>
- <blocker name='kma-gcm-aes-256'/>
- <blocker name='kma-gcm-aes-192'/>
- <blocker name='kma-gcm-aes-128'/>
<blocker name='ppno-sha-512-drng'/>
<blocker name='pcc-xts-eaes-256'/>
<blocker name='pcc-xts-eaes-128'/>
@@ -411,7 +502,6 @@
<blocker name='cmm'/>
<blocker name='dateh2'/>
<blocker name='esop'/>
- <blocker name='msa8-base'/>
<blocker name='vxeh'/>
<blocker name='vxpd'/>
<blocker name='gs'/>
@@ -445,6 +535,7 @@
<blocker name='csske'/>
<blocker name='edat'/>
<blocker name='asnlxr'/>
+ <blocker name='msa8'/>
<blocker name='msa7'/>
<blocker name='msa6'/>
<blocker name='msa2'/>
--
2.14.2
3
5
[libvirt] [jenkins-ci PATCH] jobs: don't create MANIFEST file during build
by Daniel P. Berrangé 16 May '18
by Daniel P. Berrangé 16 May '18
16 May '18
Projects have switched to a pre-built MANIFEST
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
jobs/perl-modulebuild.yaml | 1 -
1 file changed, 1 deletion(-)
diff --git a/jobs/perl-modulebuild.yaml b/jobs/perl-modulebuild.yaml
index 60374da..a80d6b8 100644
--- a/jobs/perl-modulebuild.yaml
+++ b/jobs/perl-modulebuild.yaml
@@ -44,7 +44,6 @@
{local_env}
perl Build.PL install_base="$VIRT_PREFIX"
perl Build
- perl Build manifest
perl Build install
publishers:
- email:
--
2.17.0
1
0
16 May '18
To be applied along with
https://www.redhat.com/archives/libvir-list/2018-May/msg01121.html
once libvirt-perl switches to Module::Build.
Andrea Bolognani (3):
guests: Install Module::Build for libvirt-perl
guests: Add Archive::Tar dependency for Perl projects
guests: Blacklist perl-ExtUtils-MakeMaker
guests/vars/mappings.yml | 6 +++++-
guests/vars/projects/blacklist.yml | 1 +
guests/vars/projects/libvirt-perl.yml | 3 ++-
guests/vars/projects/libvirt-tck.yml | 1 +
4 files changed, 9 insertions(+), 2 deletions(-)
--
2.17.0
2
14
16 May '18
Andrea Bolognani (2):
jobs: Move archive_format to defaults
projects: Define archive_format for osinfo-db
jobs/autotools.yaml | 1 -
jobs/defaults.yaml | 1 +
jobs/generic.yaml | 1 -
jobs/perl-makemaker.yaml | 1 -
jobs/perl-modulebuild.yaml | 1 -
projects/osinfo-db.yaml | 3 ++-
6 files changed, 3 insertions(+), 5 deletions(-)
--
2.17.0
3
6
I'm happy to announce the release of libvirt-dbus 1.0.0.
libvirt-dbus wraps libvirt API to provide high-level object-oriented
API better suited for dbus-based applications.
You can download it here:
https://libvirt.org/sources/dbus/libvirt-dbus-1.0.0.tar.gz
* Fist stable release, from now on we will not change existing APIs
* New features
- Support for almost all relevant domain APIs and events up to libvirt 3.0.0
- Support for all relevant connect APIs up to libvirt 3.0.0
- Support for all relevant network APIs and events up to libvirt 3.0.0
- Support for all relevant storage pool APIs and events up to libvirt 3.0.0
- Support for all relevant secret APIs and evetns up to libvirt 3.0.0
* Improvements
- Added org.gtk.GDBus.DocString annotation for D-Bus APIs
- Added man page for libvirt-dbus daemon
Thanks everybody who contributed!
Pavel
1
0
16 May '18
Changes from [v1]:
* rename the script instead of dropping it;
* perform some further clean ups.
[v1] https://www.redhat.com/archives/libvir-list/2018-May/msg00220.html
Andrea Bolognani (4):
maint: Rename autobuild.sh to prepare-release.sh
prepare-release: Drop references to MinGW builds
prepare-release: Drop references to Test::AutoBuild
spec: Drop %{extra_release}
autobuild.sh | 71 -----------------------------------------
libvirt-sandbox.spec.in | 2 +-
prepare-release.sh | 39 ++++++++++++++++++++++
3 files changed, 40 insertions(+), 72 deletions(-)
delete mode 100755 autobuild.sh
create mode 100755 prepare-release.sh
--
2.17.0
2
7
Using the MANIFEST.SKIP blacklist approach risks creating tarballs with
extra files mistakenly included if the working directory is not clean.
Switch to a pre-created MANIFEST file, since maintaining this short list
of files is not hard work.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
.gitignore | 1 -
MANIFEST | 219 +++++++++++++++++++++++++++++++++++++++++++++
MANIFEST.SKIP | 19 ----
prepare-release.sh | 1 -
4 files changed, 219 insertions(+), 21 deletions(-)
create mode 100644 MANIFEST
delete mode 100644 MANIFEST.SKIP
diff --git a/.gitignore b/.gitignore
index cc1470e..ca3e424 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@
*.orig
*~
Build
-MANIFEST
META.yml
Makefile
Makefile.PL
diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..b632328
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,219 @@
+bin/libvirt-tck
+Build.PL
+conf/default.cfg
+docs/intro.pod
+docs/writing-tests.pod
+lib/Sys/Virt/TCK.pm
+lib/Sys/Virt/TCK/Capabilities.pm
+lib/Sys/Virt/TCK/DomainBuilder.pm
+lib/Sys/Virt/TCK/Hooks.pm
+lib/Sys/Virt/TCK/NetworkBuilder.pm
+lib/Sys/Virt/TCK/NetworkHelpers.pm
+lib/Sys/Virt/TCK/SELinux.pm
+lib/Sys/Virt/TCK/StoragePoolBuilder.pm
+lib/Sys/Virt/TCK/StorageVolBuilder.pm
+lib/Sys/Virt/TCK/TAP/XMLFormatter.pm
+lib/Sys/Virt/TCK/TAP/XMLFormatterSession.pm
+LICENSE
+Makefile.PL
+MANIFEST
+META.json
+META.yml
+perl-Sys-Virt-TCK.spec
+perl-Sys-Virt-TCK.spec.PL
+prepare-release.sh
+README
+scripts/domain/050-transient-lifecycle.t
+scripts/domain/051-transient-autostart.t
+scripts/domain/060-persistent-lifecycle.t
+scripts/domain/061-persistent-autostart.t
+scripts/domain/065-persistent-redefine.t
+scripts/domain/070-transient-to-persistent.t
+scripts/domain/080-unique-id-define.t
+scripts/domain/081-unique-id-create.t
+scripts/domain/082-unique-id-caching.t
+scripts/domain/090-invalid-ops-when-inactive.t
+scripts/domain/100-transient-save-restore.t
+scripts/domain/101-persistent-save-restore.t
+scripts/domain/102-broken-save-restore.t
+scripts/domain/103-blockdev-save-restore.t
+scripts/domain/110-memory-balloon.t
+scripts/domain/120-disks-stats.t
+scripts/domain/121-block-info.t
+scripts/domain/130-cpu-hotplug.t
+scripts/domain/180-interface-parameters.t
+scripts/domain/200-disk-hotplug.t
+scripts/domain/202-numa-set-parameters.t
+scripts/domain/205-disk-hotplug-ordering.t
+scripts/domain/207-disk-media-change.t
+scripts/domain/210-nic-hotplug.t
+scripts/domain/215-nic-hotplug-many.t
+scripts/domain/240-usb-host-hotplug.t
+scripts/domain/250-pci-host-hotplug.t
+scripts/domain/300-migration.t
+scripts/domain/301-migration-max-speed.t
+scripts/hooks/051-daemon-hook.t
+scripts/hooks/052-domain-hook.t
+scripts/networks/050-transient-lifecycle.t
+scripts/networks/051-transient-autostart.t
+scripts/networks/060-persistent-lifecycle.t
+scripts/networks/061-persistent-autostart.t
+scripts/networks/065-persistent-redefine.t
+scripts/networks/070-transient-to-persistent.t
+scripts/networks/080-unique-id-define.t
+scripts/networks/081-unique-id-create.t
+scripts/networks/082-unique-id-caching.t
+scripts/networks/090-invalid-ops-when-inactive.t
+scripts/networks/100-apply-verify-host.t
+scripts/networks/110-interface-change-transaction.t
+scripts/networks/networkApplyTest.sh
+scripts/networks/networkxml2hostout/tck-testnet-1.dat
+scripts/networks/networkxml2hostout/tck-testnet-1.post.dat
+scripts/networks/networkxml2hostout/tck-testnet-2.dat
+scripts/networks/networkxml2hostout/tck-testnet-2.post.dat
+scripts/networks/networkxml2hostout/tck-testnet-3.dat
+scripts/networks/networkxml2hostout/tck-testnet-3.post.dat
+scripts/networks/networkxml2xmlin/tck-testnet-1.xml
+scripts/networks/networkxml2xmlin/tck-testnet-2.xml
+scripts/networks/networkxml2xmlin/tck-testnet-3.xml
+scripts/nwfilter/050-apply-verify-host.t
+scripts/nwfilter/060-concurrency.t
+scripts/nwfilter/100-ping-still-working.t
+scripts/nwfilter/210-no-mac-spoofing.t
+scripts/nwfilter/220-no-ip-spoofing.t
+scripts/nwfilter/230-no-mac-broadcast.t
+scripts/nwfilter/240-no-arp-spoofing.t
+scripts/nwfilter/300-vsitype.t
+scripts/nwfilter/concurrency/chg-vm-filter.sh
+scripts/nwfilter/concurrency/start-destroy-vm.sh
+scripts/nwfilter/concurrency/tck-vm1-filter1.xml
+scripts/nwfilter/concurrency/tck-vm1-filter2.xml
+scripts/nwfilter/concurrency/tck-vm1.xml
+scripts/nwfilter/concurrency/tck-vm2-filter1.xml
+scripts/nwfilter/concurrency/tck-vm2-filter2.xml
+scripts/nwfilter/concurrency/tck-vm2.xml
+scripts/nwfilter/nwfilter2vmtest.sh
+scripts/nwfilter/nwfilter_concurrent.sh
+scripts/nwfilter/nwfilterxml2fwallout/ah-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/ah-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/all-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/all-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/arp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/comment-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/conntrack-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/esp-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/esp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/example-1.fwall
+scripts/nwfilter/nwfilterxml2fwallout/example-2.fwall
+scripts/nwfilter/nwfilterxml2fwallout/hex-data-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/icmp-direction-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/icmp-direction2-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/icmp-direction3-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/icmp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/icmpv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/igmp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/ip-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/ipset-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/ipt-no-macspoof-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/iter-test1.fwall
+scripts/nwfilter/nwfilterxml2fwallout/iter-test2.fwall
+scripts/nwfilter/nwfilterxml2fwallout/iter-test3.fwall
+scripts/nwfilter/nwfilterxml2fwallout/mac-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/rarp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/sctp-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/sctp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/stp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/target-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/target-test2.fwall
+scripts/nwfilter/nwfilterxml2fwallout/tcp-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/tcp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/testvm.fwall.dat
+scripts/nwfilter/nwfilterxml2fwallout/udp-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/udp-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/udplite-ipv6-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/udplite-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/vlan-test.fwall
+scripts/nwfilter/nwfilterxml2fwallout/zzz-ipset-cleanup.fwall
+scripts/nwfilter/nwfilterxml2xmlin/ah-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ah-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/all-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/all-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/arp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/comment-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/conntrack-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/esp-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/esp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/example-1.xml
+scripts/nwfilter/nwfilterxml2xmlin/example-2.xml
+scripts/nwfilter/nwfilterxml2xmlin/hex-data-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/icmp-direction-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/icmp-direction2-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/icmp-direction3-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/icmp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/icmpv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/igmp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ip-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ipset-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ipt-no-macspoof-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/iter-test1.xml
+scripts/nwfilter/nwfilterxml2xmlin/iter-test2.xml
+scripts/nwfilter/nwfilterxml2xmlin/iter-test3.xml
+scripts/nwfilter/nwfilterxml2xmlin/mac-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/rarp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ref-rule-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/ref-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/sctp-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/sctp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/stp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/target-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/target-test2.xml
+scripts/nwfilter/nwfilterxml2xmlin/tcp-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/tcp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/udp-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/udp-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/udplite-ipv6-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/udplite-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/vlan-test.xml
+scripts/nwfilter/nwfilterxml2xmlin/zzz-ipset-cleanup.xml
+scripts/nwfilter/README
+scripts/qemu/100-disk-encryption.t
+scripts/qemu/200-qcow2-single-backing-file.t
+scripts/qemu/205-qcow2-double-backing-file.t
+scripts/qemu/210-qcow2-auto-probing.t
+scripts/qemu/400-save-image-xml.t
+scripts/selinux/050-dynamic-relabel-yes.t
+scripts/selinux/055-dynamic-base-label.t
+scripts/selinux/100-static-relabel-no.t
+scripts/selinux/105-static-relabel-fail.t
+scripts/selinux/110-static-relabel-yes.t
+scripts/storage/050-transient-lifecycle.t
+scripts/storage/051-transient-autostart.t
+scripts/storage/060-persistent-lifecycle.t
+scripts/storage/061-persistent-autostart.t
+scripts/storage/065-persistent-redefine.t
+scripts/storage/070-transient-to-persistent.t
+scripts/storage/080-unique-id-define.t
+scripts/storage/081-unique-id-create.t
+scripts/storage/082-unique-id-caching.t
+scripts/storage/090-invalid-ops-when-inactive.t
+scripts/storage/100-create-vol-dir.t
+scripts/storage/110-disk-pool.t
+scripts/storage/120-get-ops.t
+scripts/storage/200-clone-vol-dir.t
+scripts/storage/250-vol-qcow2-backing-store.t
+scripts/storage/255-vol-qcow2-backing-store-auto.t
+scripts/storage/400-vol-download.t
+scripts/storage/405-vol-download-all.t
+scripts/storage/410-vol-download-nonblock.t
+scripts/storage/415-vol-upload.t
+scripts/storage/420-vol-upload-all.t
+scripts/storage/425-vol-upload-nonblock.t
+t/005-pod.t
+t/010-pod-coverage.t
+t/050-capabilities.t
+t/070-domain-builder.t
+t/080-network-builder.t
+t/090-storage-pool-builder.t
+t/100-storage-vol-builder.t
diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP
deleted file mode 100644
index 8aa28aa..0000000
--- a/MANIFEST.SKIP
+++ /dev/null
@@ -1,19 +0,0 @@
-.*\.old
-.*\.bak
-Sys-Virt-TCK-
-blib
-\.hg
-.*~
-\.#.*
-#.*
-^Makefile$
-.*\.orig
-data/
-results/
-^Build$
-^_build/
-^\.git/
-^cover_db/
-^libvirt-tck/
-^MYMETA.yml$
-^MYMETA\.json$
diff --git a/prepare-release.sh b/prepare-release.sh
index 75777a8..ad29f16 100755
--- a/prepare-release.sh
+++ b/prepare-release.sh
@@ -21,7 +21,6 @@ rm -rf MANIFEST blib _build Build
perl Build.PL install_base=$HOME/builder
./Build
-./Build manifest
if [ -z "$USE_COVER" ]; then
--
2.17.0
2
1
16 May '18
The Module::Build system is nicer than ExtUtils::MakeMaker as it allows
for better cross-platform portability by only relying on Perl, rather
than both Perl and system 'make' binary.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
.gitignore | 17 +++----
Build.PL | 102 +++++++++++++++++++++++++++++++++++++
MANIFEST | 73 ++++++++++++++++++++++++++
MANIFEST.SKIP | 20 --------
META.yml.PL | 55 --------------------
Makefile.PL | 85 -------------------------------
Virt.xs => lib/Sys/Virt.xs | 0
perl-Sys-Virt.spec.PL | 45 ++++++++--------
prepare-release.sh | 48 +++--------------
t/030-api-coverage.t | 2 +-
10 files changed, 210 insertions(+), 237 deletions(-)
create mode 100755 Build.PL
create mode 100644 MANIFEST
delete mode 100644 MANIFEST.SKIP
delete mode 100644 META.yml.PL
delete mode 100644 Makefile.PL
rename Virt.xs => lib/Sys/Virt.xs (100%)
diff --git a/.gitignore b/.gitignore
index dc0ba62..3f08c79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,12 @@
-*.swp
*~
-MANIFEST
META.yml
+META.json
MYMETA.*
-Makefile
-Makefile.old
+Makefile.PL
Sys-Virt-*.tar.gz
-Virt.bs
-Virt.c
-Virt.o
blib/
-cover_db
perl-Sys-Virt.spec
-pm_to_blib
-results.log
-tags
+lib/Sys/Virt\.c
+lib/Sys/Virt\.o
+_build/
+Build
diff --git a/Build.PL b/Build.PL
new file mode 100755
index 0000000..13a0e4f
--- /dev/null
+++ b/Build.PL
@@ -0,0 +1,102 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2009-2018 Red Hat, Inc.
+# Copyright (C) 2009 Daniel P. Berrange
+#
+# This program is free software; You can redistribute it and/or modify
+# it under the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any
+# later version
+#
+# The file "LICENSE" distributed along with this file provides full
+# details of the terms and conditions
+#
+
+use Module::Build;
+
+use strict;
+use warnings;
+
+my $libvirtver = "4.4.0";
+my $stat = system "pkg-config --atleast-version=$libvirtver libvirt";
+die "cannot run pkg-config to check libvirt version" if $stat == -1;
+die "libvirt >= $libvirtver is required\n" unless $stat == 0;
+
+my $LIBVIRT_LIBS = `pkg-config --libs libvirt`;
+my $LIBVIRT_CFLAGS = `pkg-config --cflags libvirt`;
+
+my $GCC_CFLAGS = "";
+if ($ENV{TEST_MAINTAINER}) {
+ $GCC_CFLAGS = qq(
+ -W -Waddress -Wall -Warray-bounds -Wattributes
+ -Wbad-function-cast -Wbuiltin-macro-redefined -Wcast-align
+ -Wchar-subscripts -Wclobbered -Wcomment -Wcomments
+ -Wcoverage-mismatch -Wcpp -Wdeprecated-declarations
+ -Wdisabled-optimization -Wdiv-by-zero -Wdouble-promotion
+ -Wempty-body -Wendif-labels -Wextra -Wformat-contains-nul
+ -Wformat-extra-args -Wformat-security -Wformat-y2k
+ -Wformat-zero-length -Wformat=2 -Wfree-nonheap-object
+ -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration
+ -Wimplicit-int -Winit-self -Wint-to-pointer-cast
+ -Winvalid-memory-model -Winvalid-pch -Wjump-misses-init
+ -Wlogical-op -Wmain -Wmaybe-uninitialized -Wmissing-braces
+ -Wmissing-declarations -Wmissing-field-initializers
+ -Wmissing-format-attribute -Wmissing-include-dirs
+ -Wmissing-noreturn -Wmissing-parameter-type
+ -Wmultichar -Wnarrowing -Wnonnull
+ -Wnormalized=nfc -Wold-style-declaration -Wold-style-definition
+ -Woverflow -Woverride-init -Wpacked-bitfield-compat -Wparentheses
+ -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas
+ -Wreturn-type -Wsequence-point -Wno-shadow -Wstrict-aliasing
+ -Wstrict-prototypes -Wsuggest-attribute=const
+ -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wswitch
+ -Wsync-nand -Wtrampolines -Wtrigraphs -Wtype-limits -Wuninitialized
+ -Wunknown-pragmas -Wunused -Wunused-but-set-parameter
+ -Wunused-but-set-variable -Wunused-function -Wunused-label
+ -Wunused-local-typedefs -Wno-unused-parameter -Wunused-result
+ -Wunused-value -Wunused-variable -Wvariadic-macros
+ -Wvector-operation-performance -Wvolatile-register-var
+ -Wwrite-strings -Wno-sign-compare -Wjump-misses-init
+ -Wno-format-nonliteral -Wframe-larger-than=8192
+ -Wno-suggest-attribute=pure -Wno-suggest-attribute=const
+ -Wno-cast-function-type
+ );
+}
+
+my $b = Module::Build->new(
+ module_name => "Sys::Virt",
+ license => 'gpl',
+ configure_requires => {
+ 'Module::Build' => 0,
+ },
+ create_makefile_pl => 'small',
+ dist_author => 'Daniel Berrange <dan(a)berrange.com>',
+ dist_abstract => 'libvirt Perl API',
+ requires => {
+ 'perl' => '5.8.0',
+ },
+ extra_compiler_flags => $GCC_CFLAGS . $LIBVIRT_CFLAGS,
+ extra_linker_flags => $LIBVIRT_LIBS,
+ build_requires => {
+ 'ExtUtils::CBuilder' => 0,
+ 'Sys::Hostname' => 0,
+ 'Test::CPAN::Changes' => 0,
+ 'Test::More' => 0,
+ 'Test::Pod' => '0',
+ 'Test::Pod::Coverage' => '0',
+ 'Time::HiRes' => 0,
+ 'XML::XPath' => 0,
+ 'XML::XPath::XMLParser' => 0,
+ },
+ script_files => [],
+ meta_add => {
+ resources => {
+ license => "http://www.gnu.org/licenses/gpl.html",
+ homepage => "http://libvirt.org/",
+ repository => "https://libvirt.org/git/?p=libvirt-perl.git;a=summary",
+ MailingList => "http://www.redhat.com/mailman/listinfo/libvir-list",
+ },
+ },
+ PL_files => { 'perl-Sys-Virt.spec.PL' => 'perl-Sys-Virt.spec' },
+ );
+$b->create_build_script;
diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..3840a5c
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,73 @@
+.gitignore
+.gitpublish
+AUTHORS
+Build.PL
+Changes
+HACKING
+INSTALL
+LICENSE
+README
+examples/auth.pl
+examples/devices.pl
+examples/dhcp-leases.pl
+examples/dom-fsinfo.pl
+examples/dom-ifinfo.pl
+examples/dom-migrate.pl
+examples/dom-stats.pl
+examples/dump-info.pl
+examples/dump-xml.pl
+examples/emulator-pin.pl
+examples/events.pl
+examples/fs-freeze.pl
+examples/hv-stat.pl
+examples/iothreadinfo.pl
+examples/node-alloc.pl
+examples/node-cpu.pl
+examples/node-devlist.pl
+examples/node-info.pl
+examples/node-ksm.pl
+examples/open-console.pl
+examples/save-restore.pl
+examples/send-key.pl
+examples/vcpuinfo.pl
+examples/vol-download-all.pl
+examples/vol-download-nonblock.pl
+examples/vol-download.pl
+examples/vol-sparse.pl
+examples/vol-upload-all.pl
+examples/vol-upload-nonblock.pl
+examples/vol-upload.pl
+lib/Sys/Virt.pm
+lib/Sys/Virt.xs
+lib/Sys/Virt/Domain.pm
+lib/Sys/Virt/DomainSnapshot.pm
+lib/Sys/Virt/Error.pm
+lib/Sys/Virt/Event.pm
+lib/Sys/Virt/Interface.pm
+lib/Sys/Virt/NWFilter.pm
+lib/Sys/Virt/Network.pm
+lib/Sys/Virt/NodeDevice.pm
+lib/Sys/Virt/Secret.pm
+lib/Sys/Virt/StoragePool.pm
+lib/Sys/Virt/StorageVol.pm
+lib/Sys/Virt/Stream.pm
+perl-Sys-Virt.spec
+perl-Sys-Virt.spec.PL
+prepare-release.sh
+Makefile.PL
+t/005-pod.t
+t/010-pod-coverage.t
+t/015-changes.t
+t/020-constants.t
+t/030-api-coverage.t
+t/100-connect.t
+t/200-domains.t
+t/300-networks.t
+t/400-storage-pools.t
+t/500-storage-vols.t
+t/600-interfaces.t
+t/800-events.t
+typemap
+Makefile.PL
+META.yml
+META.json
diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP
deleted file mode 100644
index ebce958..0000000
--- a/MANIFEST.SKIP
+++ /dev/null
@@ -1,20 +0,0 @@
-pm_to_blib
-Virt\.o
-Virt\.c
-Virt\.bs
-Virt\.xsc
-.*.old
-Sys-Virt-
-blib
-.*\.bak
-CVS
-.cvsignore
-.*~
-.#.*
-#.*
-^Makefile$
-^cover_db/
-.hg
-.*\.orig
-.*\.sh
-\.git
diff --git a/META.yml.PL b/META.yml.PL
deleted file mode 100644
index 0467309..0000000
--- a/META.yml.PL
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (C) 2008 Daniel Berrange <dan(a)berrange.com>
-
-use strict;
-use warnings;
-
-die unless (scalar @ARGV == 1);
-
-open SRC, "lib/Sys/Virt.pm"
- or die "lib/Sys/Virt.pm: $!";
-
-our $VERSION;
-while (<SRC>) {
- if (/\$VERSION\s*=\s*'(.*)'/) {
- $VERSION=$1;
- }
-}
-close SRC;
-
-local $/ = undef;
-$_ = <DATA>;
-s/\@VERSION\@/$VERSION/g;
-
-open SPEC, ">$ARGV[0]" or die "$!";
-print SPEC $_;
-close SPEC;
-__DATA__
---- #YAML:1.0
-name: Sys-Virt
-abstract: Extension for the libvirt library
-version: @VERSION@
-author:
- - Daniel P. Berrange <dan(a)berrange.com>
-license: perl
-generated_by: ExtUtils::MakeMaker version 6.30
-build_requires:
- Test::More: 0
- Test::Pod: 0
- Test::Pod::Coverage: 0
- Test::CPAN::Changes: 0
- XML::XPath: 0
- XML::XPath::XMLParser: 0
- Sys::Hostname: 0
- Time::HiRes: 0
-
-resources:
- license: http://dev.perl.org/licenses/
- homepage: http://libvirt.org/
- repository: http://libvirt.org/git/?p=libvirt-perl.git;a=summary
- MailingList: http://www.redhat.com/mailman/listinfo/libvir-list
-
-distribution_type: module
-
-meta-spec:
- version: 1.3
- url: http://module-build.sourceforge.net/META-spec-v1.3.html
diff --git a/Makefile.PL b/Makefile.PL
deleted file mode 100644
index f72e210..0000000
--- a/Makefile.PL
+++ /dev/null
@@ -1,85 +0,0 @@
-use 5.006;
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-
-my $libvirtver = "4.4.0";
-my $stat = system "pkg-config --atleast-version=$libvirtver libvirt";
-die "cannot run pkg-config to check libvirt version" if $stat == -1;
-die "libvirt >= $libvirtver is required\n" unless $stat == 0;
-
-my $LIBVIRT_LIBS = `pkg-config --libs libvirt`;
-my $LIBVIRT_CFLAGS = `pkg-config --cflags libvirt`;
-
-my $gccflags = "-W -Waddress -Wall -Warray-bounds -Wattributes \\
- -Wbad-function-cast -Wbuiltin-macro-redefined -Wcast-align \\
- -Wchar-subscripts -Wclobbered -Wcomment -Wcomments \\
- -Wcoverage-mismatch -Wcpp -Wdeprecated-declarations \\
- -Wdisabled-optimization -Wdiv-by-zero -Wdouble-promotion \\
- -Wempty-body -Wendif-labels -Wextra -Wformat-contains-nul \\
- -Wformat-extra-args -Wformat-security -Wformat-y2k \\
- -Wformat-zero-length -Wformat=2 -Wfree-nonheap-object \\
- -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration \\
- -Wimplicit-int -Winit-self -Wint-to-pointer-cast \\
- -Winvalid-memory-model -Winvalid-pch -Wjump-misses-init \\
- -Wlogical-op -Wmain -Wmaybe-uninitialized -Wmissing-braces \\
- -Wmissing-declarations -Wmissing-field-initializers \\
- -Wmissing-format-attribute -Wmissing-include-dirs \\
- -Wmissing-noreturn -Wmissing-parameter-type \\
- -Wmultichar -Wnarrowing -Wnonnull \\
- -Wnormalized=nfc -Wold-style-declaration -Wold-style-definition \\
- -Woverflow -Woverride-init -Wpacked-bitfield-compat -Wparentheses \\
- -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas \\
- -Wreturn-type -Wsequence-point -Wno-shadow -Wstrict-aliasing \\
- -Wstrict-prototypes -Wsuggest-attribute=const \\
- -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wswitch \\
- -Wsync-nand -Wtrampolines -Wtrigraphs -Wtype-limits -Wuninitialized \\
- -Wunknown-pragmas -Wunused -Wunused-but-set-parameter \\
- -Wunused-but-set-variable -Wunused-function -Wunused-label \\
- -Wunused-local-typedefs -Wno-unused-parameter -Wunused-result \\
- -Wunused-value -Wunused-variable -Wvariadic-macros \\
- -Wvector-operation-performance -Wvolatile-register-var \\
- -Wwrite-strings -Wno-sign-compare -Wjump-misses-init \\
- -Wno-format-nonliteral -Wframe-larger-than=8192 \\
- -Wno-suggest-attribute=pure -Wno-suggest-attribute=const -Werror";
-
-my $cflags;
-if ($ENV{TEST_MAINTAINER}) {
- $cflags = $gccflags;
-} else {
- $cflags = "-Wall";
-}
-
-WriteMakefile(
- 'NAME' => 'Sys::Virt',
- 'VERSION_FROM' => 'lib/Sys/Virt.pm',
- 'PREREQ_PM' => {
- 'Test::More' => 0,
- 'Test::Pod' => 0,
- 'Test::Pod::Coverage' => 0,
- 'Test::CPAN::Changes' => 0,
- 'Time::HiRes' => 0,
- 'XML::XPath' => 0,
- },
- 'AUTHOR' => 'Daniel Berrange <dan(a)berrange.com>',
- 'LIBS' => [$LIBVIRT_LIBS],
- 'INC' => "$cflags $LIBVIRT_CFLAGS",
- 'depend' => {
- Sys-Virt.spec => '$(VERSION_FROM)',
- Makefile => '$(VERSION_FROM)',
- },
- 'NO_META' => 1,
- 'realclean' => {
- FILES => 'Sys-Virt.spec',
- },
-);
-
-package MY;
-
-sub libscan
- {
- my ($self, $path) = @_;
- ($path =~ /\~$/ || $path =~ m,/CVS/,) ? undef : $path;
- }
-
-__END__
diff --git a/Virt.xs b/lib/Sys/Virt.xs
similarity index 100%
rename from Virt.xs
rename to lib/Sys/Virt.xs
diff --git a/perl-Sys-Virt.spec.PL b/perl-Sys-Virt.spec.PL
index ffa6c86..e7b4044 100644
--- a/perl-Sys-Virt.spec.PL
+++ b/perl-Sys-Virt.spec.PL
@@ -6,15 +6,19 @@ use strict;
die unless (scalar @ARGV == 1);
-unless (do './lib/Sys/Virt.pm')
- {
- if ($@) { die $@ };
- die "lib/Sys/Virt.pm: $!";
- }
+open PM, './lib/Sys/Virt.pm' or die "lib/Sys/Virt.pm: $!";
+my $ver;
+while (<PM>) {
+ if (/our \$VERSION = '(.*)'/) {
+ $ver = $1;
+ last;
+ }
+}
+die "cannot find version" unless $ver;
local $/ = undef;
$_ = <DATA>;
-s/\@VERSION\@/$Sys::Virt::VERSION/g;
+s/\@VERSION\@/$ver/g;
open SPEC, ">$ARGV[0]" or die "$!";
print SPEC $_;
@@ -29,9 +33,10 @@ Summary: Represent and manage a libvirt hypervisor connection
License: GPLv2+ or Artistic
Group: Development/Libraries
URL: http://search.cpan.org/dist/Sys-Virt/
-Source0: http://www.cpan.org/authors/id/D/DA/DANBERR/Sys-Virt-%{version}.tar.gz
+Source0: http://www.cpan.org/authors/id/D/DA/DANBERR/Sys-Virt-v%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires: perl(ExtUtils::MakeMaker)
+BuildRequires: perl(ExtUtils::CBuilder)
+BuildRequires: perl(Module::Build)
BuildRequires: perl(Test::Pod)
BuildRequires: perl(Test::Pod::Coverage)
BuildRequires: perl(Test::CPAN::Changes)
@@ -46,32 +51,24 @@ machine management APIs. This allows machines running within arbitrary
virtualization containers to be managed with a consistent API.
%prep
-%setup -q -n Sys-Virt-%{version}
+%setup -q -n Sys-Virt-v%{version}
-sed -i -e '/Sys-Virt\.spec/d' Makefile.PL
-sed -i -e '/\.spec\.PL$/d' MANIFEST
-rm -f *.spec.PL
%build
-%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="$RPM_OPT_FLAGS"
-make %{?_smp_mflags}
+%{__perl} Build.PL installdirs=vendor
+./Build
%install
-rm -rf $RPM_BUILD_ROOT
+./Build install destdir=$RPM_BUILD_ROOT create_packlist=0
-make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
-
-find $RPM_BUILD_ROOT -type f \( -name .packlist -o -name '*.bs' -empty \) |
- xargs rm -f
-find $RPM_BUILD_ROOT -depth -type d -empty -exec rmdir {} \;
+#find $RPM_BUILD_ROOT -type f \( -name .packlist -o -name '*.bs' -empty \) |
+# xargs rm -f
+#find $RPM_BUILD_ROOT -depth -type d -empty -exec rmdir {} \;
%{_fixperms} $RPM_BUILD_ROOT/*
%check
-make test
-
-%clean
-rm -rf $RPM_BUILD_ROOT
+./Build test
%files
%defattr(-,root,root,-)
diff --git a/prepare-release.sh b/prepare-release.sh
index fea03f4..6850350 100755
--- a/prepare-release.sh
+++ b/prepare-release.sh
@@ -4,52 +4,18 @@ NAME=Sys-Virt
set -e
-test -n "$1" && RESULTS=$1 || RESULTS=results.log
+rm -rf blib _build Build $NAME-*.tar.gz
-make -k realclean ||:
-rm -rf MANIFEST blib pm_to_blib
+test -z "$AUTOBUILD_INSTALL_ROOT" && AUTOBUILD_INSTALL_ROOT=$HOME/builder
export TEST_MAINTAINER=1
-perl Makefile.PL PREFIX=$HOME/builder
+perl Build.PL install_base=$AUTOBUILD_INSTALL_ROOT
-rm -f MANIFEST
-
-# Build the RPM.
-make
-make manifest
-
-if [ -z "$USE_COVER" ]; then
- perl -MDevel::Cover -e '' 1>/dev/null 2>&1 && USE_COVER=1 || USE_COVER=0
-fi
-
-if [ -z "$SKIP_TESTS" -o "$SKIP_TESTS" = "0" ]; then
- if [ "$USE_COVER" = "1" ]; then
- cover -delete
- export HARNESS_PERL_SWITCHES=-MDevel::Cover
- fi
-
- # set -o pipefail is a bashism; this use of exec is the POSIX alternative
- exec 3>&1
- st=$(
- exec 4>&1 >&3
- { make test 2>&1 3>&- 4>&-; echo $? >&4; } | tee "$RESULTS"
- )
- exec 3>&-
- test "$st" = 0
-
- if [ "$USE_COVER" = "1" ]; then
- cover
- mkdir blib/coverage
- cp -a cover_db/*.html cover_db/*.css blib/coverage
- mv blib/coverage/coverage.html blib/coverage/index.html
- fi
-fi
-
-make install
-
-rm -f $NAME-*.tar.gz
-make dist
+./Build
+./Build test
+./Build install
+./Build dist
if [ -f /usr/bin/rpmbuild ]; then
rpmbuild --nodeps -ta --clean $NAME-*.tar.gz
diff --git a/t/030-api-coverage.t b/t/030-api-coverage.t
index 95bbd11..39d6146 100644
--- a/t/030-api-coverage.t
+++ b/t/030-api-coverage.t
@@ -48,7 +48,7 @@ foreach my $n ($set->get_nodelist) {
push @macros, $n->getData();
}
-open XS, "<Virt.xs" or die "cannot read Virt.xs: $!";
+open XS, "<lib/Sys/Virt.xs" or die "cannot read lib/Sys/Virt.xs: $!";
my $xs;
{
--
2.17.0
2
2
Boris Fiuczynski (1):
libvirt-override.py: fix sparseSendAll
Marc Hartmayer (4):
libvirt_qemu/lxc: import 'sys' package
libvirt_qemu/lxc: fix a namespace issue
libvirt-override.py: remove unused import
Allow virConnect to be used as a context manager
generator.py | 8 ++++++--
libvirt-override-virConnect.py | 6 ++++++
libvirt-override-virStream.py | 2 +-
libvirt-override.py | 1 -
4 files changed, 13 insertions(+), 4 deletions(-)
--
2.13.4
2
7
changes in v2:
- fixed build error for each patch by moving all lifecycle function
rename into a single patch
Pavel Hrdina (4):
domain: Rename (Get|Set)BlkioParameters
events: Rename AgentLifecycle event
events: Rename IOErrorReason event
events: Rename all lifecycle event functions to follow the signal name
data/org.libvirt.Domain.xml | 8 +++---
src/domain.c | 32 ++++++++++-----------
src/events.c | 56 ++++++++++++++++++-------------------
3 files changed, 48 insertions(+), 48 deletions(-)
--
2.17.0
2
5
libvirt has switched to Jansson as its JSON implementation,
so we need it available for builds to succeed. yajl, on the
other hand, is no longer needed.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
Should be pushed at the same time as Ján's series.
.travis.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 140072b801..c3ea9f73b9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -24,7 +24,7 @@ matrix:
- brew uninstall python mercurial postgis sfcgal cgal gdal
- brew update
- brew upgrade
- - brew install python rpcgen yajl
+ - brew install python rpcgen jansson
script:
# We can't run make distcheck/syntax-check because they
# fail on macOS, but doing 'install' and 'dist' gives us
@@ -61,6 +61,7 @@ addons:
- libdevmapper-dev
- libfuse-dev
- libgnutls-dev
+ - libjansson-dev
- libnetcf-dev
- libnl-3-dev
- libnl-route-3-dev
@@ -82,7 +83,6 @@ addons:
- libxen-dev
- libxml2-dev
- libxml2-utils
- - libyajl-dev
- lvm2
- make
# - nfs-common # broken on trusty since build #807 (2018-01-09)
--
2.17.0
2
1
16 May '18
v1: https://www.redhat.com/archives/libvir-list/2018-April/msg01578.html
Changes since v1... Rather than disallow, alter the code in order to
handle the creation, conversion, and resize of qcow[2] encrypted images.
See conversion processing description from review:
https://www.redhat.com/archives/libvir-list/2018-April/msg02037.html
John Ferlan (4):
storage_util: Alter qemu storage encryption arguments
storage_util: Fix qemu qcow[2] encryption convert processing
storage_util: Don't assume "luks" encryption for resize
docs: Update news.xml to describe encrypted image issues
docs/formatstorageencryption.html.in | 10 ++
docs/news.xml | 12 ++
src/storage/storage_util.c | 159 +++++++++++++++------
src/storage/storage_util.h | 10 +-
src/util/virqemu.c | 10 +-
src/util/virqemu.h | 3 +-
tests/storagevolxml2argvdata/qcow2-1.1.argv | 4 +-
tests/storagevolxml2argvdata/qcow2-compat.argv | 4 +-
.../qcow2-from-logical-compat.argv | 12 +-
tests/storagevolxml2argvdata/qcow2-lazy.argv | 6 +-
.../qcow2-nobacking-convert-prealloc-compat.argv | 13 +-
.../qcow2-nobacking-prealloc-compat.argv | 4 +-
.../qcow2-nocapacity-convert-prealloc.argv | 14 +-
tests/storagevolxml2argvdata/qcow2-nocapacity.argv | 4 +-
.../storagevolxml2argvdata/qcow2-nocow-compat.argv | 6 +-
tests/storagevolxml2argvdata/qcow2-nocow.argv | 3 +-
tests/storagevolxml2argvtest.c | 61 ++++++--
17 files changed, 255 insertions(+), 80 deletions(-)
--
2.14.3
1
4
[libvirt] [dbus PATCH v2] docs: Introduce man file for libvirt-dbus daemon
by Pavel Hrdina 16 May '18
by Pavel Hrdina 16 May '18
16 May '18
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
changes in v2:
- added pod2man build dependency into spec file
.gitignore | 2 ++
Makefile.am | 2 +-
configure.ac | 1 +
docs/Makefile.am | 13 +++++++++
docs/libvirt-dbus.pod | 66 +++++++++++++++++++++++++++++++++++++++++++
libvirt-dbus.spec.in | 2 ++
6 files changed, 85 insertions(+), 1 deletion(-)
create mode 100644 docs/Makefile.am
create mode 100644 docs/libvirt-dbus.pod
diff --git a/.gitignore b/.gitignore
index c6d9754..0bf09cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,6 +29,8 @@ vgcore.*
/data/system/libvirt-dbus.rules
/data/system/org.libvirt.conf
+/docs/*.1
+
/src/.deps/
/src/libvirt-dbus
/src/org.libvirt.service
diff --git a/Makefile.am b/Makefile.am
index 16f57b2..bb5ff5c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
-SUBDIRS = data src tests
+SUBDIRS = data docs src tests
ACLOCAL_AMFLAGS = -I m4
diff --git a/configure.ac b/configure.ac
index cc8947c..707a03e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -74,6 +74,7 @@ AC_CONFIG_FILES([run],
[chmod +x,-w run])
AC_OUTPUT(Makefile
data/Makefile
+ docs/Makefile
src/Makefile
tests/Makefile
libvirt-dbus.spec)
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..c41ffae
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,13 @@
+POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)"
+
+PODFILES = libvirt-dbus.pod
+
+%.8: %.pod
+ $(AM_V_GEN)$(POD2MAN) -s 8 $< $@ \
+ && if grep 'POD ERROR' $@; then rm $@; exit 1; fi
+
+man8_MANS = libvirt-dbus.8
+
+EXTRA_DIST = $(PODFILES)
+
+CLEANFILES = $(man8_MANS)
diff --git a/docs/libvirt-dbus.pod b/docs/libvirt-dbus.pod
new file mode 100644
index 0000000..49de044
--- /dev/null
+++ b/docs/libvirt-dbus.pod
@@ -0,0 +1,66 @@
+=head1 NAME
+
+libvirt-dbus - D-Bus daemon exporting libvirt API
+
+=head1 SYNOPSIS
+
+B<libvirt-dbus> [I<OPTION>]...
+
+=head1 DESCRIPTION
+
+libvirt-dbus wraps libvirt API to provide a high-level object-oriented
+API better suited for dbus-based applications.
+
+Normally libvirt-dbus is started by D-Bus daemon on demand.
+
+=head1 OPTIONS
+
+=over
+
+=item B<-h --help>
+
+Display command line help usage then exit.
+
+=item B<--system>
+
+Connect to the system bus.
+
+=item B<--session>
+
+Connect to the session bus.
+
+=item B<-t --threads> I<NUM>
+
+Configure maximal number of worker threads.
+
+=back
+
+=head1 BUGS
+
+Please report all bugs you discover. This should be done via either:
+
+=over
+
+=item a) the mailing list
+
+L<https://libvirt.org/contact.html>
+
+=item b) the bug tracker
+
+L<https://libvirt.org/bugs.html>
+
+=back
+
+Alternatively, you may report bugs to your software distribution / vendor.
+
+=head1 AUTHORS
+
+Please refer to the AUTHORS file distributed with libvirt-dbus.
+
+=head1 LICENSE
+
+libvirt-dbus is Free Software and licenced under LGPLv2+.
+
+=head1 SEE ALSO
+
+L<https://libvirt.org/dbus.html>, L<https://libvirt.org/>
diff --git a/libvirt-dbus.spec.in b/libvirt-dbus.spec.in
index 1543197..db58483 100644
--- a/libvirt-dbus.spec.in
+++ b/libvirt-dbus.spec.in
@@ -17,6 +17,7 @@ BuildRequires: gcc
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: libvirt-devel >= %{libvirt_version}
BuildRequires: libvirt-glib-devel >= %{libvirt_glib_version}
+BuildRequires: /usr/bin/pod2man
Requires: dbus
Requires: glib2 >= %{glib2_version}
@@ -55,5 +56,6 @@ exit 0
%{_datadir}/dbus-1/system-services/org.libvirt.service
%{_datadir}/dbus-1/system.d/org.libvirt.conf
%{_datadir}/dbus-1/interfaces/org.libvirt.*.xml
+%{_mandir}/man8/libvirt-dbus.8*
%changelog
--
2.17.0
2
1
Hi,
I would like to make the next libvirt-dbus release with stable APIs,
there is a lot of them already implemented and other projects can start
adapting to use libvirt-dbus.
The release version would be 1.0.0 and currently libvirt-dbus will
cover APIs up to libvirt-3.0.0 as a start point because that libvirt
version is available in all downstream distributions currently
supported by libvirt.
So I would like to ask everyone to look at the APIs to check whether it
make sense and whether something is missing or could be excluded.
The idea of libvirt-dbus is not to export every API if there is a better
API to do the job, so for example:
- all APIs that have both versions with and without flags we will
export only the one with flags.
- some of the Stats APIs can be omitted since the same values are
also exported in the GetStats (virDomainListGetStats)
I would like to make the release this week so any help or suggestion is
welcome. The API definition is in the data/org.libvirt.*.xml files.
Thanks and regards
Pavel
2
3
[libvirt] [PATCH v2] log: actually do substring matches with fnmatch
by Daniel P. Berrangé 16 May '18
by Daniel P. Berrangé 16 May '18
16 May '18
Historically we matched log filters with strstr(), and when switching to
fnmatch in cbb0fd3cfdc287f6f4653ef1f04a7cfb2ea51b27, it was stated that
we would continue to match substrings, with "foo" being equivalent to
"*foo*". Unfortuntely I forget to provide the code to actually make that
happen. This fixes it to prepend and append "*". We don't bother to
check if the pattern already has a leading/trailing '*', because
"**foo**" will match the same as "*foo*".
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
Changed in v2:
- Simplify to always append/prepend '*'
- Other fixes from Erik
src/util/virlog.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/util/virlog.c b/src/util/virlog.c
index be9fc0cf78..9b63b8e7cd 100644
--- a/src/util/virlog.c
+++ b/src/util/virlog.c
@@ -1409,6 +1409,7 @@ virLogFilterNew(const char *match,
{
virLogFilterPtr ret = NULL;
char *mdup = NULL;
+ size_t mlen = strlen(match);
virCheckFlags(VIR_LOG_STACK_TRACE, NULL);
@@ -1418,9 +1419,16 @@ virLogFilterNew(const char *match,
return NULL;
}
- if (VIR_STRDUP_QUIET(mdup, match) < 0)
+ /* We must treat 'foo' as equiv to '*foo*' for fnmatch
+ * todo substring matches, so add 2 extra bytes */
+ */
+ if (VIR_ALLOC_N_QUIET(mdup, mlen + 3) < 0)
return NULL;
+ mdup[0] = '*';
+ memcpy(mdup + 1, match, mlen);
+ mdup[mlen + 1] = '*';
+
if (VIR_ALLOC_QUIET(ret) < 0) {
VIR_FREE(mdup);
return NULL;
--
2.17.0
2
1
16 May '18
Applies cleanly on top of master, but requires [1] in order
to successfully install Ubuntu 18.04 guests.
[1] https://www.redhat.com/archives/libvir-list/2018-May/msg01105.html
Andrea Bolognani (2):
guests: Ubuntu 18.04 has python3-libxml2
guests: Add Ubuntu 18.04 support
.../host_vars/libvirt-ubuntu-18/install.yml | 3 +++
guests/host_vars/libvirt-ubuntu-18/main.yml | 19 +++++++++++++++++++
guests/vars/mappings.yml | 3 ++-
3 files changed, 24 insertions(+), 1 deletion(-)
create mode 100644 guests/host_vars/libvirt-ubuntu-18/install.yml
create mode 100644 guests/host_vars/libvirt-ubuntu-18/main.yml
--
2.17.0
2
3
[libvirt] [jenkins-ci PATCH 0/8] guests: Various fixes and improvements
by Andrea Bolognani 16 May '18
by Andrea Bolognani 16 May '18
16 May '18
Andrea Bolognani (8):
guests: Fix PERL5LIB on Debian sid
guests: Simplify mapping for libtool
guests: Prepare Debian and Ubuntu to build more projects
guests: libosinfo needs libcurl and wget
guests: libvirt-dbus needs python3-gi
guests: virt-manager needs gtk-update-icon-cache
guests: Remove duplicate native packages
guests: Move native packages out of MinGW packages
guests/host_vars/libvirt-debian-8/main.yml | 1 +
guests/host_vars/libvirt-debian-sid/main.yml | 2 +-
guests/host_vars/libvirt-ubuntu-14/main.yml | 1 +
guests/host_vars/libvirt-ubuntu-16/main.yml | 2 ++
guests/vars/mappings.yml | 10 ++++++++--
guests/vars/projects/libosinfo+mingw.yml | 2 ++
guests/vars/projects/libosinfo.yml | 2 ++
guests/vars/projects/libvirt+mingw.yml | 2 --
guests/vars/projects/libvirt-dbus.yml | 1 +
guests/vars/projects/libvirt-glib+mingw.yml | 4 ----
guests/vars/projects/virt-manager.yml | 1 +
guests/vars/projects/virt-viewer+mingw.yml | 3 ---
guests/vars/projects/virt-viewer.yml | 1 +
13 files changed, 20 insertions(+), 12 deletions(-)
--
2.17.0
2
23
Pavel Hrdina (4):
domain: Rename (Get|Set)BlkioParameters
events: Rename AgentLifecycle event
events: Rename all lifecycle event functions to follow the signal name
events: Rename IOErrorReason event
data/org.libvirt.Domain.xml | 8 +++---
src/domain.c | 32 ++++++++++-----------
src/events.c | 56 ++++++++++++++++++-------------------
3 files changed, 48 insertions(+), 48 deletions(-)
--
2.17.0
3
8
16 May '18
Historically we matched log filters with strstr(), and when switching to
fnmatch in cbb0fd3cfdc287f6f4653ef1f04a7cfb2ea51b27, it was stated that
we would continue to match substrings, with "foo" being equivalent to
"*foo*". Unfortuntely I forget to provide the code to actually make that
happen. This fixes it to prepend and append "*" if not already present in
the user's pattern.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/util/virlog.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/util/virlog.c b/src/util/virlog.c
index be9fc0cf78..d548010b10 100644
--- a/src/util/virlog.c
+++ b/src/util/virlog.c
@@ -1409,6 +1409,8 @@ virLogFilterNew(const char *match,
{
virLogFilterPtr ret = NULL;
char *mdup = NULL;
+ size_t mlen = strlen(match);
+ size_t off = 0;
virCheckFlags(VIR_LOG_STACK_TRACE, NULL);
@@ -1418,9 +1420,19 @@ virLogFilterNew(const char *match,
return NULL;
}
- if (VIR_STRDUP_QUIET(mdup, match) < 0)
+ if (VIR_ALLOC_N_QUIET(mdup, mlen + 3) < 0)
return NULL;
+ if (match[0] != '*') {
+ mdup[off++] = '*';
+ }
+ memcpy(mdup + off, match, mlen + 1);
+ off += mlen;
+ if (match[mlen - 1] != '*') {
+ mdup[off++] = '*';
+ mdup[off++] = '\0';
+ }
+
if (VIR_ALLOC_QUIET(ret) < 0) {
VIR_FREE(mdup);
return NULL;
--
2.17.0
2
2
16 May '18
The Module::Build system is nicer than ExtUtils::MakeMaker as it allows
for better cross-platform portability by only relying on Perl, rather
than both Perl and system 'make' binary.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
.gitignore | 17 +++----
Build.PL | 102 +++++++++++++++++++++++++++++++++++++
MANIFEST | 73 ++++++++++++++++++++++++++
MANIFEST.SKIP | 20 --------
META.yml.PL | 55 --------------------
Makefile.PL | 85 -------------------------------
autobuild.sh | 55 +++-----------------
Virt.xs => lib/Sys/Virt.xs | 0
perl-Sys-Virt.spec.PL | 45 ++++++++--------
t/030-api-coverage.t | 2 +-
10 files changed, 210 insertions(+), 244 deletions(-)
create mode 100755 Build.PL
create mode 100644 MANIFEST
delete mode 100644 MANIFEST.SKIP
delete mode 100644 META.yml.PL
delete mode 100644 Makefile.PL
rename Virt.xs => lib/Sys/Virt.xs (100%)
diff --git a/.gitignore b/.gitignore
index dc0ba62..3f08c79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,12 @@
-*.swp
*~
-MANIFEST
META.yml
+META.json
MYMETA.*
-Makefile
-Makefile.old
+Makefile.PL
Sys-Virt-*.tar.gz
-Virt.bs
-Virt.c
-Virt.o
blib/
-cover_db
perl-Sys-Virt.spec
-pm_to_blib
-results.log
-tags
+lib/Sys/Virt\.c
+lib/Sys/Virt\.o
+_build/
+Build
diff --git a/Build.PL b/Build.PL
new file mode 100755
index 0000000..13a0e4f
--- /dev/null
+++ b/Build.PL
@@ -0,0 +1,102 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2009-2018 Red Hat, Inc.
+# Copyright (C) 2009 Daniel P. Berrange
+#
+# This program is free software; You can redistribute it and/or modify
+# it under the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any
+# later version
+#
+# The file "LICENSE" distributed along with this file provides full
+# details of the terms and conditions
+#
+
+use Module::Build;
+
+use strict;
+use warnings;
+
+my $libvirtver = "4.4.0";
+my $stat = system "pkg-config --atleast-version=$libvirtver libvirt";
+die "cannot run pkg-config to check libvirt version" if $stat == -1;
+die "libvirt >= $libvirtver is required\n" unless $stat == 0;
+
+my $LIBVIRT_LIBS = `pkg-config --libs libvirt`;
+my $LIBVIRT_CFLAGS = `pkg-config --cflags libvirt`;
+
+my $GCC_CFLAGS = "";
+if ($ENV{TEST_MAINTAINER}) {
+ $GCC_CFLAGS = qq(
+ -W -Waddress -Wall -Warray-bounds -Wattributes
+ -Wbad-function-cast -Wbuiltin-macro-redefined -Wcast-align
+ -Wchar-subscripts -Wclobbered -Wcomment -Wcomments
+ -Wcoverage-mismatch -Wcpp -Wdeprecated-declarations
+ -Wdisabled-optimization -Wdiv-by-zero -Wdouble-promotion
+ -Wempty-body -Wendif-labels -Wextra -Wformat-contains-nul
+ -Wformat-extra-args -Wformat-security -Wformat-y2k
+ -Wformat-zero-length -Wformat=2 -Wfree-nonheap-object
+ -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration
+ -Wimplicit-int -Winit-self -Wint-to-pointer-cast
+ -Winvalid-memory-model -Winvalid-pch -Wjump-misses-init
+ -Wlogical-op -Wmain -Wmaybe-uninitialized -Wmissing-braces
+ -Wmissing-declarations -Wmissing-field-initializers
+ -Wmissing-format-attribute -Wmissing-include-dirs
+ -Wmissing-noreturn -Wmissing-parameter-type
+ -Wmultichar -Wnarrowing -Wnonnull
+ -Wnormalized=nfc -Wold-style-declaration -Wold-style-definition
+ -Woverflow -Woverride-init -Wpacked-bitfield-compat -Wparentheses
+ -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas
+ -Wreturn-type -Wsequence-point -Wno-shadow -Wstrict-aliasing
+ -Wstrict-prototypes -Wsuggest-attribute=const
+ -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wswitch
+ -Wsync-nand -Wtrampolines -Wtrigraphs -Wtype-limits -Wuninitialized
+ -Wunknown-pragmas -Wunused -Wunused-but-set-parameter
+ -Wunused-but-set-variable -Wunused-function -Wunused-label
+ -Wunused-local-typedefs -Wno-unused-parameter -Wunused-result
+ -Wunused-value -Wunused-variable -Wvariadic-macros
+ -Wvector-operation-performance -Wvolatile-register-var
+ -Wwrite-strings -Wno-sign-compare -Wjump-misses-init
+ -Wno-format-nonliteral -Wframe-larger-than=8192
+ -Wno-suggest-attribute=pure -Wno-suggest-attribute=const
+ -Wno-cast-function-type
+ );
+}
+
+my $b = Module::Build->new(
+ module_name => "Sys::Virt",
+ license => 'gpl',
+ configure_requires => {
+ 'Module::Build' => 0,
+ },
+ create_makefile_pl => 'small',
+ dist_author => 'Daniel Berrange <dan(a)berrange.com>',
+ dist_abstract => 'libvirt Perl API',
+ requires => {
+ 'perl' => '5.8.0',
+ },
+ extra_compiler_flags => $GCC_CFLAGS . $LIBVIRT_CFLAGS,
+ extra_linker_flags => $LIBVIRT_LIBS,
+ build_requires => {
+ 'ExtUtils::CBuilder' => 0,
+ 'Sys::Hostname' => 0,
+ 'Test::CPAN::Changes' => 0,
+ 'Test::More' => 0,
+ 'Test::Pod' => '0',
+ 'Test::Pod::Coverage' => '0',
+ 'Time::HiRes' => 0,
+ 'XML::XPath' => 0,
+ 'XML::XPath::XMLParser' => 0,
+ },
+ script_files => [],
+ meta_add => {
+ resources => {
+ license => "http://www.gnu.org/licenses/gpl.html",
+ homepage => "http://libvirt.org/",
+ repository => "https://libvirt.org/git/?p=libvirt-perl.git;a=summary",
+ MailingList => "http://www.redhat.com/mailman/listinfo/libvir-list",
+ },
+ },
+ PL_files => { 'perl-Sys-Virt.spec.PL' => 'perl-Sys-Virt.spec' },
+ );
+$b->create_build_script;
diff --git a/MANIFEST b/MANIFEST
new file mode 100644
index 0000000..d425ef1
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,73 @@
+.gitignore
+.gitpublish
+AUTHORS
+Build.PL
+Changes
+HACKING
+INSTALL
+LICENSE
+README
+autobuild.sh
+examples/auth.pl
+examples/devices.pl
+examples/dhcp-leases.pl
+examples/dom-fsinfo.pl
+examples/dom-ifinfo.pl
+examples/dom-migrate.pl
+examples/dom-stats.pl
+examples/dump-info.pl
+examples/dump-xml.pl
+examples/emulator-pin.pl
+examples/events.pl
+examples/fs-freeze.pl
+examples/hv-stat.pl
+examples/iothreadinfo.pl
+examples/node-alloc.pl
+examples/node-cpu.pl
+examples/node-devlist.pl
+examples/node-info.pl
+examples/node-ksm.pl
+examples/open-console.pl
+examples/save-restore.pl
+examples/send-key.pl
+examples/vcpuinfo.pl
+examples/vol-download-all.pl
+examples/vol-download-nonblock.pl
+examples/vol-download.pl
+examples/vol-sparse.pl
+examples/vol-upload-all.pl
+examples/vol-upload-nonblock.pl
+examples/vol-upload.pl
+lib/Sys/Virt.pm
+lib/Sys/Virt.xs
+lib/Sys/Virt/Domain.pm
+lib/Sys/Virt/DomainSnapshot.pm
+lib/Sys/Virt/Error.pm
+lib/Sys/Virt/Event.pm
+lib/Sys/Virt/Interface.pm
+lib/Sys/Virt/NWFilter.pm
+lib/Sys/Virt/Network.pm
+lib/Sys/Virt/NodeDevice.pm
+lib/Sys/Virt/Secret.pm
+lib/Sys/Virt/StoragePool.pm
+lib/Sys/Virt/StorageVol.pm
+lib/Sys/Virt/Stream.pm
+perl-Sys-Virt.spec
+perl-Sys-Virt.spec.PL
+Makefile.PL
+t/005-pod.t
+t/010-pod-coverage.t
+t/015-changes.t
+t/020-constants.t
+t/030-api-coverage.t
+t/100-connect.t
+t/200-domains.t
+t/300-networks.t
+t/400-storage-pools.t
+t/500-storage-vols.t
+t/600-interfaces.t
+t/800-events.t
+typemap
+Makefile.PL
+META.yml
+META.json
diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP
deleted file mode 100644
index ebce958..0000000
--- a/MANIFEST.SKIP
+++ /dev/null
@@ -1,20 +0,0 @@
-pm_to_blib
-Virt\.o
-Virt\.c
-Virt\.bs
-Virt\.xsc
-.*.old
-Sys-Virt-
-blib
-.*\.bak
-CVS
-.cvsignore
-.*~
-.#.*
-#.*
-^Makefile$
-^cover_db/
-.hg
-.*\.orig
-.*\.sh
-\.git
diff --git a/META.yml.PL b/META.yml.PL
deleted file mode 100644
index 0467309..0000000
--- a/META.yml.PL
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (C) 2008 Daniel Berrange <dan(a)berrange.com>
-
-use strict;
-use warnings;
-
-die unless (scalar @ARGV == 1);
-
-open SRC, "lib/Sys/Virt.pm"
- or die "lib/Sys/Virt.pm: $!";
-
-our $VERSION;
-while (<SRC>) {
- if (/\$VERSION\s*=\s*'(.*)'/) {
- $VERSION=$1;
- }
-}
-close SRC;
-
-local $/ = undef;
-$_ = <DATA>;
-s/\@VERSION\@/$VERSION/g;
-
-open SPEC, ">$ARGV[0]" or die "$!";
-print SPEC $_;
-close SPEC;
-__DATA__
---- #YAML:1.0
-name: Sys-Virt
-abstract: Extension for the libvirt library
-version: @VERSION@
-author:
- - Daniel P. Berrange <dan(a)berrange.com>
-license: perl
-generated_by: ExtUtils::MakeMaker version 6.30
-build_requires:
- Test::More: 0
- Test::Pod: 0
- Test::Pod::Coverage: 0
- Test::CPAN::Changes: 0
- XML::XPath: 0
- XML::XPath::XMLParser: 0
- Sys::Hostname: 0
- Time::HiRes: 0
-
-resources:
- license: http://dev.perl.org/licenses/
- homepage: http://libvirt.org/
- repository: http://libvirt.org/git/?p=libvirt-perl.git;a=summary
- MailingList: http://www.redhat.com/mailman/listinfo/libvir-list
-
-distribution_type: module
-
-meta-spec:
- version: 1.3
- url: http://module-build.sourceforge.net/META-spec-v1.3.html
diff --git a/Makefile.PL b/Makefile.PL
deleted file mode 100644
index f72e210..0000000
--- a/Makefile.PL
+++ /dev/null
@@ -1,85 +0,0 @@
-use 5.006;
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-
-my $libvirtver = "4.4.0";
-my $stat = system "pkg-config --atleast-version=$libvirtver libvirt";
-die "cannot run pkg-config to check libvirt version" if $stat == -1;
-die "libvirt >= $libvirtver is required\n" unless $stat == 0;
-
-my $LIBVIRT_LIBS = `pkg-config --libs libvirt`;
-my $LIBVIRT_CFLAGS = `pkg-config --cflags libvirt`;
-
-my $gccflags = "-W -Waddress -Wall -Warray-bounds -Wattributes \\
- -Wbad-function-cast -Wbuiltin-macro-redefined -Wcast-align \\
- -Wchar-subscripts -Wclobbered -Wcomment -Wcomments \\
- -Wcoverage-mismatch -Wcpp -Wdeprecated-declarations \\
- -Wdisabled-optimization -Wdiv-by-zero -Wdouble-promotion \\
- -Wempty-body -Wendif-labels -Wextra -Wformat-contains-nul \\
- -Wformat-extra-args -Wformat-security -Wformat-y2k \\
- -Wformat-zero-length -Wformat=2 -Wfree-nonheap-object \\
- -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration \\
- -Wimplicit-int -Winit-self -Wint-to-pointer-cast \\
- -Winvalid-memory-model -Winvalid-pch -Wjump-misses-init \\
- -Wlogical-op -Wmain -Wmaybe-uninitialized -Wmissing-braces \\
- -Wmissing-declarations -Wmissing-field-initializers \\
- -Wmissing-format-attribute -Wmissing-include-dirs \\
- -Wmissing-noreturn -Wmissing-parameter-type \\
- -Wmultichar -Wnarrowing -Wnonnull \\
- -Wnormalized=nfc -Wold-style-declaration -Wold-style-definition \\
- -Woverflow -Woverride-init -Wpacked-bitfield-compat -Wparentheses \\
- -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wpragmas \\
- -Wreturn-type -Wsequence-point -Wno-shadow -Wstrict-aliasing \\
- -Wstrict-prototypes -Wsuggest-attribute=const \\
- -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wswitch \\
- -Wsync-nand -Wtrampolines -Wtrigraphs -Wtype-limits -Wuninitialized \\
- -Wunknown-pragmas -Wunused -Wunused-but-set-parameter \\
- -Wunused-but-set-variable -Wunused-function -Wunused-label \\
- -Wunused-local-typedefs -Wno-unused-parameter -Wunused-result \\
- -Wunused-value -Wunused-variable -Wvariadic-macros \\
- -Wvector-operation-performance -Wvolatile-register-var \\
- -Wwrite-strings -Wno-sign-compare -Wjump-misses-init \\
- -Wno-format-nonliteral -Wframe-larger-than=8192 \\
- -Wno-suggest-attribute=pure -Wno-suggest-attribute=const -Werror";
-
-my $cflags;
-if ($ENV{TEST_MAINTAINER}) {
- $cflags = $gccflags;
-} else {
- $cflags = "-Wall";
-}
-
-WriteMakefile(
- 'NAME' => 'Sys::Virt',
- 'VERSION_FROM' => 'lib/Sys/Virt.pm',
- 'PREREQ_PM' => {
- 'Test::More' => 0,
- 'Test::Pod' => 0,
- 'Test::Pod::Coverage' => 0,
- 'Test::CPAN::Changes' => 0,
- 'Time::HiRes' => 0,
- 'XML::XPath' => 0,
- },
- 'AUTHOR' => 'Daniel Berrange <dan(a)berrange.com>',
- 'LIBS' => [$LIBVIRT_LIBS],
- 'INC' => "$cflags $LIBVIRT_CFLAGS",
- 'depend' => {
- Sys-Virt.spec => '$(VERSION_FROM)',
- Makefile => '$(VERSION_FROM)',
- },
- 'NO_META' => 1,
- 'realclean' => {
- FILES => 'Sys-Virt.spec',
- },
-);
-
-package MY;
-
-sub libscan
- {
- my ($self, $path) = @_;
- ($path =~ /\~$/ || $path =~ m,/CVS/,) ? undef : $path;
- }
-
-__END__
diff --git a/autobuild.sh b/autobuild.sh
index 8a6d102..597b9bf 100755
--- a/autobuild.sh
+++ b/autobuild.sh
@@ -7,53 +7,18 @@ NAME=Sys-Virt
set -e
-test -n "$1" && RESULTS=$1 || RESULTS=results.log
-: ${AUTOBUILD_INSTALL_ROOT=$HOME/builder}
+rm -rf blib _build Build $NAME-*.tar.gz
-make -k realclean ||:
-rm -rf MANIFEST blib pm_to_blib
+test -z "$AUTOBUILD_INSTALL_ROOT" && AUTOBUILD_INSTALL_ROOT=$HOME/builder
export TEST_MAINTAINER=1
-perl Makefile.PL PREFIX=$AUTOBUILD_INSTALL_ROOT
+perl Build.PL install_base=$AUTOBUILD_INSTALL_ROOT
-rm -f MANIFEST
-
-# Build the RPM.
-make
-make manifest
-
-if [ -z "$USE_COVER" ]; then
- perl -MDevel::Cover -e '' 1>/dev/null 2>&1 && USE_COVER=1 || USE_COVER=0
-fi
-
-if [ -z "$SKIP_TESTS" -o "$SKIP_TESTS" = "0" ]; then
- if [ "$USE_COVER" = "1" ]; then
- cover -delete
- export HARNESS_PERL_SWITCHES=-MDevel::Cover
- fi
-
- # set -o pipefail is a bashism; this use of exec is the POSIX alternative
- exec 3>&1
- st=$(
- exec 4>&1 >&3
- { make test 2>&1 3>&- 4>&-; echo $? >&4; } | tee "$RESULTS"
- )
- exec 3>&-
- test "$st" = 0
-
- if [ "$USE_COVER" = "1" ]; then
- cover
- mkdir blib/coverage
- cp -a cover_db/*.html cover_db/*.css blib/coverage
- mv blib/coverage/coverage.html blib/coverage/index.html
- fi
-fi
-
-make install
-
-rm -f $NAME-*.tar.gz
-make dist
+./Build
+./Build test
+./Build install
+./Build dist
if [ -f /usr/bin/rpmbuild ]; then
if [ -n "$AUTOBUILD_COUNTER" ]; then
@@ -65,10 +30,4 @@ if [ -f /usr/bin/rpmbuild ]; then
rpmbuild --nodeps -ta --define "extra_release $EXTRA_RELEASE" --clean $NAME-*.tar.gz
fi
-# Skip debian pkg for now
exit 0
-
-if [ -f /usr/bin/fakeroot ]; then
- fakeroot debian/rules clean
- fakeroot debian/rules DESTDIR=$HOME/packages/debian binary
-fi
diff --git a/Virt.xs b/lib/Sys/Virt.xs
similarity index 100%
rename from Virt.xs
rename to lib/Sys/Virt.xs
diff --git a/perl-Sys-Virt.spec.PL b/perl-Sys-Virt.spec.PL
index dbb749d..e5140b6 100644
--- a/perl-Sys-Virt.spec.PL
+++ b/perl-Sys-Virt.spec.PL
@@ -6,15 +6,19 @@ use strict;
die unless (scalar @ARGV == 1);
-unless (do './lib/Sys/Virt.pm')
- {
- if ($@) { die $@ };
- die "lib/Sys/Virt.pm: $!";
- }
+open PM, './lib/Sys/Virt.pm' or die "lib/Sys/Virt.pm: $!";
+my $ver;
+while (<PM>) {
+ if (/our \$VERSION = '(.*)'/) {
+ $ver = $1;
+ last;
+ }
+}
+die "cannot find version" unless $ver;
local $/ = undef;
$_ = <DATA>;
-s/\@VERSION\@/$Sys::Virt::VERSION/g;
+s/\@VERSION\@/$ver/g;
open SPEC, ">$ARGV[0]" or die "$!";
print SPEC $_;
@@ -29,9 +33,10 @@ Summary: Represent and manage a libvirt hypervisor connection
License: GPLv2+ or Artistic
Group: Development/Libraries
URL: http://search.cpan.org/dist/Sys-Virt/
-Source0: http://www.cpan.org/authors/id/D/DA/DANBERR/Sys-Virt-%{version}.tar.gz
+Source0: http://www.cpan.org/authors/id/D/DA/DANBERR/Sys-Virt-v%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires: perl(ExtUtils::MakeMaker)
+BuildRequires: perl(ExtUtils::CBuilder)
+BuildRequires: perl(Module::Build)
BuildRequires: perl(Test::Pod)
BuildRequires: perl(Test::Pod::Coverage)
BuildRequires: perl(Test::CPAN::Changes)
@@ -46,32 +51,24 @@ machine management APIs. This allows machines running within arbitrary
virtualization containers to be managed with a consistent API.
%prep
-%setup -q -n Sys-Virt-%{version}
+%setup -q -n Sys-Virt-v%{version}
-sed -i -e '/Sys-Virt\.spec/d' Makefile.PL
-sed -i -e '/\.spec\.PL$/d' MANIFEST
-rm -f *.spec.PL
%build
-%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="$RPM_OPT_FLAGS"
-make %{?_smp_mflags}
+%{__perl} Build.PL installdirs=vendor
+./Build
%install
-rm -rf $RPM_BUILD_ROOT
+./Build install destdir=$RPM_BUILD_ROOT create_packlist=0
-make pure_install PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
-
-find $RPM_BUILD_ROOT -type f \( -name .packlist -o -name '*.bs' -empty \) |
- xargs rm -f
-find $RPM_BUILD_ROOT -depth -type d -empty -exec rmdir {} \;
+#find $RPM_BUILD_ROOT -type f \( -name .packlist -o -name '*.bs' -empty \) |
+# xargs rm -f
+#find $RPM_BUILD_ROOT -depth -type d -empty -exec rmdir {} \;
%{_fixperms} $RPM_BUILD_ROOT/*
%check
-make test
-
-%clean
-rm -rf $RPM_BUILD_ROOT
+./Build test
%files
%defattr(-,root,root,-)
diff --git a/t/030-api-coverage.t b/t/030-api-coverage.t
index 95bbd11..39d6146 100644
--- a/t/030-api-coverage.t
+++ b/t/030-api-coverage.t
@@ -48,7 +48,7 @@ foreach my $n ($set->get_nodelist) {
push @macros, $n->getData();
}
-open XS, "<Virt.xs" or die "cannot read Virt.xs: $!";
+open XS, "<lib/Sys/Virt.xs" or die "cannot read lib/Sys/Virt.xs: $!";
my $xs;
{
--
2.17.0
2
6
[libvirt] [jenkins-ci PATCH] projects: Temporarily skip expensive tests on FreeBSD
by Andrea Bolognani 16 May '18
by Andrea Bolognani 16 May '18
16 May '18
The gnulib issue has been reported upstream, but solving it
is taking a bit and all jobs downstream of libvirt-master-check
are blocked in the meantime, which is less than ideal. Put a
temporary workaround in place.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
projects/libvirt.yaml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/projects/libvirt.yaml b/projects/libvirt.yaml
index 6f5464b..3273ebf 100644
--- a/projects/libvirt.yaml
+++ b/projects/libvirt.yaml
@@ -19,7 +19,11 @@
- autotools-check-job:
parent_jobs: 'libvirt-master-syntax-check'
local_env: |
- export VIR_TEST_EXPENSIVE=1
+ # gnulib's test-poll is broken on FreeBSD, so disable expensive
+ # tests (which include gnulib's test suite) until it's fixed
+ if [ "$(uname)" != "FreeBSD" ]; then
+ export VIR_TEST_EXPENSIVE=1
+ fi
export VIR_TEST_DEBUG=2
- autotools-rpm-job:
parent_jobs: 'libvirt-master-check'
--
2.17.0
2
1
The first two patches fix the build and tests without GnuTLS.
The third requires GnuTLS 3.2.0 or newer.
That means we don't have to worry about gnutls_hash_fast not
being present (introduced in GnuTLS 2.10.0).
The rest of the patches cleans up the code that deals with older
GnuTLS.
Ján Tomko (8):
virCryptoHashBuf: return the length of the hash in bytes
Skip vircryptotest and virfilecachetest without gnutls
Require GnuTLS >= 3.2.0
Deprecate GNUTLS_GCRYPT
Remove explicit check for gnutls_rnd
Remove explicit check for gnutls_cipher_encrypt
Fix indentation in virCryptoHaveCipher
Remove check for gnutls/crypto.h
config-post.h | 2 --
m4/virt-gnutls.m4 | 50 +++-------------------------
src/libvirt.c | 83 ----------------------------------------------
src/rpc/virnettlscontext.c | 4 +--
src/util/vircrypto.c | 28 ++++++++--------
src/util/vircrypto.h | 2 +-
tests/qemuxml2argvtest.c | 8 ++---
tests/vircryptotest.c | 26 ++++++++++-----
tests/virfilecachetest.c | 19 ++++++++---
9 files changed, 58 insertions(+), 164 deletions(-)
--
2.16.1
2
9
[libvirt] [PATCH] Add a MAINTAINERS file to suggest reviewers for patches
by Daniel P. Berrangé 16 May '18
by Daniel P. Berrangé 16 May '18
16 May '18
Currently all patches are simply sent to the main libvirt development
mailing list. Sometimes individual developers are also CC'd but this is
typically the exception.
Libvirt does not follow a subsystem maintainer model, so there is no
notion of owners for the different areas of code, but there certainly
are people with high levels of expertize in specific areas.
This patch thus proposes pulling in QEMU's get_maintainer.pl script and
creating MAINTAINERS file to list who the experts are for specific
areas. Combined with git-pubish, this will help ensure that patches are
brought to the attention of people with direct expertize.
For example:
$ git show b04629b62934caa8786e73c3db985672422fc662 | \
./build-aux/get_maintainer.pl
Jim Fehlig <jfehlig(a)suse.com> (maintainer:libxl)
libvir-list(a)redhat.com (open list:All patches)
Or
$ git show e7cb9c4e230c3c77e35e72334c261b5b0a2211c6 | \
./build-aux/get_maintainer.pl
Jiri Denemar <jdenemar(a)redhat.com> (maintainer:CPU modelling)
libvir-list(a)redhat.com (open list:All patches)
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
.gitpublish | 1 +
MAINTAINERS | 67 ++
build-aux/get_maintainer.pl | 2143 +++++++++++++++++++++++++++++++++++
3 files changed, 2211 insertions(+)
create mode 100644 MAINTAINERS
create mode 100755 build-aux/get_maintainer.pl
diff --git a/.gitpublish b/.gitpublish
index 857f0d552c..6f2f9d11fa 100644
--- a/.gitpublish
+++ b/.gitpublish
@@ -1,3 +1,4 @@
[gitpublishprofile "default"]
base = master
to = libvir-list(a)redhat.com
+cccmd = build-aux/get_maintainer.pl --noroles --norolestats --nogit --nogit-fallback 2>/dev/null
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000000..5756fd8b00
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,67 @@
+Libvirt Maintainers
+===================
+
+The intention of this file is NOT to establish who owns what portions of the
+code base, but to provide a set of names that developers can consult when they
+have a question about a particular subset and also to provide a set of names
+to be CC'd when submitting a patch to obtain appropriate review.
+
+In general, if you have a question about inclusion of a patch, you should
+consult libvir-list(a)redhat.com and not any specific individual privately.
+
+Descriptions of section entries:
+
+ M: Mail patches to: FullName <address@domain>
+ S: Status, one of the following:
+ Supported: Someone is actually paid to look after this.
+ Maintained: Someone actually looks after it.
+ Odd Fixes: It has a maintainer but they don't have time to do
+ much other than throw the odd patch in. See below.
+ Orphan: No current maintainer [but maybe you could take the
+ role as you write your new code].
+ Obsolete: Old code. Something tagged obsolete generally means
+ it has been replaced by a better system and you
+ should be using that.
+ F: Files and directories with wildcard patterns.
+ A trailing slash includes all files and subdirectory files.
+ F: drivers/net/ all files in and below drivers/net
+ F: drivers/net/* all files in drivers/net, but not below
+ F: */net/* all files in "any top level directory"/net
+ One pattern per line. Multiple F: lines acceptable.
+ X: Files and directories that are NOT maintained, same rules as F:
+ Files exclusions are tested before file matches.
+ Can be useful for excluding a specific subdirectory, for instance:
+ F: net/
+ X: net/ipv6/
+ matches all files in and below net excluding net/ipv6/
+ K: Keyword perl extended regex pattern to match content in a
+ patch or file. For instance:
+ K: of_get_profile
+ matches patches or files that contain "of_get_profile"
+ K: \b(printk|pr_(info|err))\b
+ matches patches or files that contain one or more of the words
+ printk, pr_info or pr_err
+ One regex pattern per line. Multiple K: lines acceptable.
+
+
+All patches
+L: libvir-list(a)redhat.com
+F: *
+F: */
+
+Common code
+-----------
+
+CPU modelling
+M: Jiri Denemar <jdenemar(a)redhat.com>
+S: Maintained
+F: src/cpu/
+
+Driver code
+-----------
+libxl
+M: Jim Fehlig <jfehlig(a)suse.com>
+S: Maintained
+F: src/libxl/
+F: tests/*libxl*
+
diff --git a/build-aux/get_maintainer.pl b/build-aux/get_maintainer.pl
new file mode 100755
index 0000000000..c94929d4f8
--- /dev/null
+++ b/build-aux/get_maintainer.pl
@@ -0,0 +1,2143 @@
+#!/usr/bin/env perl
+# (c) 2007, Joe Perches <joe(a)perches.com>
+# created from checkpatch.pl
+#
+# Print selected MAINTAINERS information for
+# the files modified in a patch or for a file
+#
+# usage: perl scripts/get_maintainer.pl [OPTIONS] <patch>
+# perl scripts/get_maintainer.pl [OPTIONS] -f <file>
+#
+# Licensed under the terms of the GNU GPL License version 2
+
+use strict;
+use warnings;
+
+my $P = $0;
+my $V = '0.26';
+
+use Getopt::Long qw(:config no_auto_abbrev);
+
+my $lk_path = "./";
+my $email = 1;
+my $email_usename = 1;
+my $email_maintainer = 1;
+my $email_reviewer = 1;
+my $email_list = 1;
+my $email_subscriber_list = 0;
+my $email_git = 0;
+my $email_git_all_signature_types = 0;
+my $email_git_blame = 0;
+my $email_git_blame_signatures = 1;
+my $email_git_fallback = 1;
+my $email_git_min_signatures = 1;
+my $email_git_max_maintainers = 5;
+my $email_git_min_percent = 5;
+my $email_git_since = "1-year-ago";
+my $email_hg_since = "-365";
+my $interactive = 0;
+my $email_remove_duplicates = 1;
+my $email_use_mailmap = 1;
+my $output_multiline = 1;
+my $output_separator = ", ";
+my $output_roles = 0;
+my $output_rolestats = 1;
+my $scm = 0;
+my $web = 0;
+my $subsystem = 0;
+my $status = 0;
+my $keywords = 1;
+my $sections = 0;
+my $file_emails = 0;
+my $from_filename = 0;
+my $pattern_depth = 0;
+my $version = 0;
+my $help = 0;
+
+my $vcs_used = 0;
+
+my $exit = 0;
+
+my %commit_author_hash;
+my %commit_signer_hash;
+
+# Signature types of people who are either
+# a) responsible for the code in question, or
+# b) familiar enough with it to give relevant feedback
+my @signature_tags = ();
+push(@signature_tags, "Signed-off-by:");
+push(@signature_tags, "Reviewed-by:");
+push(@signature_tags, "Acked-by:");
+
+my $signature_pattern = "\(" . join("|", @signature_tags) . "\)";
+
+# rfc822 email address - preloaded methods go here.
+my $rfc822_lwsp = "(?:(?:\\r\\n)?[ \\t])";
+my $rfc822_char = '[\\000-\\377]';
+
+# VCS command support: class-like functions and strings
+
+my %VCS_cmds;
+
+my %VCS_cmds_git = (
+ "execute_cmd" => \&git_execute_cmd,
+ "available" => '(which("git") ne "") && (-d ".git")',
+ "find_signers_cmd" =>
+ "git log --no-color --follow --since=\$email_git_since " .
+ '--format="GitCommit: %H%n' .
+ 'GitAuthor: %an <%ae>%n' .
+ 'GitDate: %aD%n' .
+ 'GitSubject: %s%n' .
+ '%b%n"' .
+ " -- \$file",
+ "find_commit_signers_cmd" =>
+ "git log --no-color " .
+ '--format="GitCommit: %H%n' .
+ 'GitAuthor: %an <%ae>%n' .
+ 'GitDate: %aD%n' .
+ 'GitSubject: %s%n' .
+ '%b%n"' .
+ " -1 \$commit",
+ "find_commit_author_cmd" =>
+ "git log --no-color " .
+ '--format="GitCommit: %H%n' .
+ 'GitAuthor: %an <%ae>%n' .
+ 'GitDate: %aD%n' .
+ 'GitSubject: %s%n"' .
+ " -1 \$commit",
+ "blame_range_cmd" => "git blame -l -L \$diff_start,+\$diff_length \$file",
+ "blame_file_cmd" => "git blame -l \$file",
+ "commit_pattern" => "^GitCommit: ([0-9a-f]{40,40})",
+ "blame_commit_pattern" => "^([0-9a-f]+) ",
+ "author_pattern" => "^GitAuthor: (.*)",
+ "subject_pattern" => "^GitSubject: (.*)",
+);
+
+my %VCS_cmds_hg = (
+ "execute_cmd" => \&hg_execute_cmd,
+ "available" => '(which("hg") ne "") && (-d ".hg")',
+ "find_signers_cmd" =>
+ "hg log --date=\$email_hg_since " .
+ "--template='HgCommit: {node}\\n" .
+ "HgAuthor: {author}\\n" .
+ "HgSubject: {desc}\\n'" .
+ " -- \$file",
+ "find_commit_signers_cmd" =>
+ "hg log " .
+ "--template='HgSubject: {desc}\\n'" .
+ " -r \$commit",
+ "find_commit_author_cmd" =>
+ "hg log " .
+ "--template='HgCommit: {node}\\n" .
+ "HgAuthor: {author}\\n" .
+ "HgSubject: {desc|firstline}\\n'" .
+ " -r \$commit",
+ "blame_range_cmd" => "", # not supported
+ "blame_file_cmd" => "hg blame -n \$file",
+ "commit_pattern" => "^HgCommit: ([0-9a-f]{40,40})",
+ "blame_commit_pattern" => "^([ 0-9a-f]+):",
+ "author_pattern" => "^HgAuthor: (.*)",
+ "subject_pattern" => "^HgSubject: (.*)",
+);
+
+my $conf = which_conf(".get_maintainer.conf");
+if (-f $conf) {
+ my @conf_args;
+ open(my $conffile, '<', "$conf")
+ or warn "$P: Can't find a readable .get_maintainer.conf file $!\n";
+
+ while (<$conffile>) {
+ my $line = $_;
+
+ $line =~ s/\s*\n?$//g;
+ $line =~ s/^\s*//g;
+ $line =~ s/\s+/ /g;
+
+ next if ($line =~ m/^\s*#/);
+ next if ($line =~ m/^\s*$/);
+
+ my @words = split(" ", $line);
+ foreach my $word (@words) {
+ last if ($word =~ m/^#/);
+ push (@conf_args, $word);
+ }
+ }
+ close($conffile);
+ unshift(@ARGV, @conf_args) if @conf_args;
+}
+
+if (!GetOptions(
+ 'email!' => \$email,
+ 'git!' => \$email_git,
+ 'git-all-signature-types!' => \$email_git_all_signature_types,
+ 'git-blame!' => \$email_git_blame,
+ 'git-blame-signatures!' => \$email_git_blame_signatures,
+ 'git-fallback!' => \$email_git_fallback,
+ 'git-min-signatures=i' => \$email_git_min_signatures,
+ 'git-max-maintainers=i' => \$email_git_max_maintainers,
+ 'git-min-percent=i' => \$email_git_min_percent,
+ 'git-since=s' => \$email_git_since,
+ 'hg-since=s' => \$email_hg_since,
+ 'i|interactive!' => \$interactive,
+ 'remove-duplicates!' => \$email_remove_duplicates,
+ 'mailmap!' => \$email_use_mailmap,
+ 'm!' => \$email_maintainer,
+ 'r!' => \$email_reviewer,
+ 'n!' => \$email_usename,
+ 'l!' => \$email_list,
+ 's!' => \$email_subscriber_list,
+ 'multiline!' => \$output_multiline,
+ 'roles!' => \$output_roles,
+ 'rolestats!' => \$output_rolestats,
+ 'separator=s' => \$output_separator,
+ 'subsystem!' => \$subsystem,
+ 'status!' => \$status,
+ 'scm!' => \$scm,
+ 'web!' => \$web,
+ 'pattern-depth=i' => \$pattern_depth,
+ 'k|keywords!' => \$keywords,
+ 'sections!' => \$sections,
+ 'fe|file-emails!' => \$file_emails,
+ 'f|file' => \$from_filename,
+ 'v|version' => \$version,
+ 'h|help|usage' => \$help,
+ )) {
+ die "$P: invalid argument - use --help if necessary\n";
+}
+
+if ($help != 0) {
+ usage();
+ exit 0;
+}
+
+if ($version != 0) {
+ print("${P} ${V}\n");
+ exit 0;
+}
+
+if (-t STDIN && !@ARGV) {
+ # We're talking to a terminal, but have no command line arguments.
+ die "$P: missing patchfile or -f file - use --help if necessary\n";
+}
+
+$output_multiline = 0 if ($output_separator ne ", ");
+$output_rolestats = 1 if ($interactive);
+$output_roles = 1 if ($output_rolestats);
+
+if ($sections) {
+ $email = 0;
+ $email_list = 0;
+ $scm = 0;
+ $status = 0;
+ $subsystem = 0;
+ $web = 0;
+ $keywords = 0;
+ $interactive = 0;
+} else {
+ my $selections = $email + $scm + $status + $subsystem + $web;
+ if ($selections == 0) {
+ die "$P: Missing required option: email, scm, status, subsystem or web\n";
+ }
+}
+
+if ($email &&
+ ($email_maintainer + $email_reviewer +
+ $email_list + $email_subscriber_list +
+ $email_git + $email_git_blame) == 0) {
+ die "$P: Please select at least 1 email option\n";
+}
+
+if (!top_of_tree($lk_path)) {
+ die "$P: The current directory does not appear to be "
+ . "a libvirt source tree.\n";
+}
+
+## Read MAINTAINERS for type/value pairs
+
+my @typevalue = ();
+my %keyword_hash;
+
+open (my $maint, '<', "${lk_path}MAINTAINERS")
+ or die "$P: Can't open MAINTAINERS: $!\n";
+while (<$maint>) {
+ my $line = $_;
+
+ if ($line =~ m/^(.):\s*(.*)/) {
+ my $type = $1;
+ my $value = $2;
+
+ ##Filename pattern matching
+ if ($type eq "F" || $type eq "X") {
+ $value =~ s@\.@\\\.@g; ##Convert . to \.
+ $value =~ s/\*/\.\*/g; ##Convert * to .*
+ $value =~ s/\?/\./g; ##Convert ? to .
+ ##if pattern is a directory and it lacks a trailing slash, add one
+ if ((-d $value)) {
+ $value =~ s@([^/])$@$1/@;
+ }
+ } elsif ($type eq "K") {
+ $keyword_hash{@typevalue} = $value;
+ }
+ push(@typevalue, "$type:$value");
+ } elsif (!/^(\s)*$/) {
+ $line =~ s/\n$//g;
+ push(@typevalue, $line);
+ }
+}
+close($maint);
+
+
+#
+# Read mail address map
+#
+
+my $mailmap;
+
+read_mailmap();
+
+sub read_mailmap {
+ $mailmap = {
+ names => {},
+ addresses => {}
+ };
+
+ return if (!$email_use_mailmap || !(-f "${lk_path}.mailmap"));
+
+ open(my $mailmap_file, '<', "${lk_path}.mailmap")
+ or warn "$P: Can't open .mailmap: $!\n";
+
+ while (<$mailmap_file>) {
+ s/#.*$//; #strip comments
+ s/^\s+|\s+$//g; #trim
+
+ next if (/^\s*$/); #skip empty lines
+ #entries have one of the following formats:
+ # name1 <mail1>
+ # <mail1> <mail2>
+ # name1 <mail1> <mail2>
+ # name1 <mail1> name2 <mail2>
+ # (see man git-shortlog)
+
+ if (/^([^<]+)<([^>]+)>$/) {
+ my $real_name = $1;
+ my $address = $2;
+
+ $real_name =~ s/\s+$//;
+ ($real_name, $address) = parse_email("$real_name <$address>");
+ $mailmap->{names}->{$address} = $real_name;
+
+ } elsif (/^<([^>]+)>\s*<([^>]+)>$/) {
+ my $real_address = $1;
+ my $wrong_address = $2;
+
+ $mailmap->{addresses}->{$wrong_address} = $real_address;
+
+ } elsif (/^(.+)<([^>]+)>\s*<([^>]+)>$/) {
+ my $real_name = $1;
+ my $real_address = $2;
+ my $wrong_address = $3;
+
+ $real_name =~ s/\s+$//;
+ ($real_name, $real_address) =
+ parse_email("$real_name <$real_address>");
+ $mailmap->{names}->{$wrong_address} = $real_name;
+ $mailmap->{addresses}->{$wrong_address} = $real_address;
+
+ } elsif (/^(.+)<([^>]+)>\s*(.+)\s*<([^>]+)>$/) {
+ my $real_name = $1;
+ my $real_address = $2;
+ my $wrong_name = $3;
+ my $wrong_address = $4;
+
+ $real_name =~ s/\s+$//;
+ ($real_name, $real_address) =
+ parse_email("$real_name <$real_address>");
+
+ $wrong_name =~ s/\s+$//;
+ ($wrong_name, $wrong_address) =
+ parse_email("$wrong_name <$wrong_address>");
+
+ my $wrong_email = format_email($wrong_name, $wrong_address, 1);
+ $mailmap->{names}->{$wrong_email} = $real_name;
+ $mailmap->{addresses}->{$wrong_email} = $real_address;
+ }
+ }
+ close($mailmap_file);
+}
+
+## use the filenames on the command line or find the filenames in the patchfiles
+
+my @files = ();
+my @range = ();
+my @keyword_tvi = ();
+my @file_emails = ();
+
+if (!@ARGV) {
+ push(@ARGV, "&STDIN");
+}
+
+foreach my $file (@ARGV) {
+ if ($file ne "&STDIN") {
+ ##if $file is a directory and it lacks a trailing slash, add one
+ if ((-d $file)) {
+ $file =~ s@([^/])$@$1/@;
+ } elsif (!(stat $file)) {
+ die "$P: file '${file}' not found: $!\n";
+ }
+ }
+ if ($from_filename) {
+ push(@files, $file);
+ if ($file ne "MAINTAINERS" && -f $file && ($keywords || $file_emails)) {
+ open(my $f, '<', $file)
+ or die "$P: Can't open $file: $!\n";
+ my $text = do { local($/) ; <$f> };
+ close($f);
+ if ($keywords) {
+ foreach my $line (keys %keyword_hash) {
+ if ($text =~ m/$keyword_hash{$line}/x) {
+ push(@keyword_tvi, $line);
+ }
+ }
+ }
+ if ($file_emails) {
+ my @poss_addr = $text =~ m$[A-Za-zÀ-ÿ\"\' \,\.\+-]*\s*[\,]*\s*[\(\<\{]{0,1}[A-Za-z0-9_\.\+-]+\(a)[A-Za-z0-9\.-]+\.[A-Za-z0-9]+[\)\>\}]{0,1}$g;
+ push(@file_emails, clean_file_emails(@poss_addr));
+ }
+ }
+ } else {
+ my $file_cnt = @files;
+ my $lastfile;
+
+ open(my $patch, "< $file")
+ or die "$P: Can't open $file: $!\n";
+
+ # We can check arbitrary information before the patch
+ # like the commit message, mail headers, etc...
+ # This allows us to match arbitrary keywords against any part
+ # of a git format-patch generated file (subject tags, etc...)
+
+ my $patch_prefix = ""; #Parsing the intro
+
+ while (<$patch>) {
+ my $patch_line = $_;
+ if (m/^\+\+\+\s+(\S+)/) {
+ my $filename = $1;
+ $filename =~ s@^[^/]*/@@;
+ $filename =~ s@\n@@;
+ $lastfile = $filename;
+ push(@files, $filename);
+ $patch_prefix = "^[+-].*"; #Now parsing the actual patch
+ } elsif (m/^\@\@ -(\d+),(\d+)/) {
+ if ($email_git_blame) {
+ push(@range, "$lastfile:$1:$2");
+ }
+ } elsif ($keywords) {
+ foreach my $line (keys %keyword_hash) {
+ if ($patch_line =~ m/${patch_prefix}$keyword_hash{$line}/x) {
+ push(@keyword_tvi, $line);
+ }
+ }
+ }
+ }
+ close($patch);
+
+ if ($file_cnt == @files) {
+ warn "$P: file '${file}' doesn't appear to be a patch. "
+ . "Add -f to options?\n";
+ }
+ @files = sort_and_uniq(@files);
+ }
+}
+
+@file_emails = uniq(@file_emails);
+
+my %email_hash_name;
+my %email_hash_address;
+my @email_to = ();
+my %hash_list_to;
+my @list_to = ();
+my @scm = ();
+my @web = ();
+my @subsystem = ();
+my @status = ();
+my %deduplicate_name_hash = ();
+my %deduplicate_address_hash = ();
+
+my @maintainers = get_maintainers();
+
+if (@maintainers) {
+ @maintainers = merge_email(@maintainers);
+ output(@maintainers);
+}
+
+if ($scm) {
+ @scm = uniq(@scm);
+ output(@scm);
+}
+
+if ($status) {
+ @status = uniq(@status);
+ output(@status);
+}
+
+if ($subsystem) {
+ @subsystem = uniq(@subsystem);
+ output(@subsystem);
+}
+
+if ($web) {
+ @web = uniq(@web);
+ output(@web);
+}
+
+exit($exit);
+
+sub range_is_maintained {
+ my ($start, $end) = @_;
+
+ for (my $i = $start; $i < $end; $i++) {
+ my $line = $typevalue[$i];
+ if ($line =~ m/^(.):\s*(.*)/) {
+ my $type = $1;
+ my $value = $2;
+ if ($type eq 'S') {
+ if ($value =~ /(maintain|support)/i) {
+ return 1;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+sub range_has_maintainer {
+ my ($start, $end) = @_;
+
+ for (my $i = $start; $i < $end; $i++) {
+ my $line = $typevalue[$i];
+ if ($line =~ m/^(.):\s*(.*)/) {
+ my $type = $1;
+ my $value = $2;
+ if ($type eq 'M') {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+sub get_maintainers {
+ %email_hash_name = ();
+ %email_hash_address = ();
+ %commit_author_hash = ();
+ %commit_signer_hash = ();
+ @email_to = ();
+ %hash_list_to = ();
+ @list_to = ();
+ @scm = ();
+ @web = ();
+ @subsystem = ();
+ @status = ();
+ %deduplicate_name_hash = ();
+ %deduplicate_address_hash = ();
+ if ($email_git_all_signature_types) {
+ $signature_pattern = "(.+?)[Bb][Yy]:";
+ } else {
+ $signature_pattern = "\(" . join("|", @signature_tags) . "\)";
+ }
+
+ # Find responsible parties
+
+ my %exact_pattern_match_hash = ();
+
+ foreach my $file (@files) {
+
+ my %hash;
+ my $tvi = find_first_section();
+ while ($tvi < @typevalue) {
+ my $start = find_starting_index($tvi);
+ my $end = find_ending_index($tvi);
+ my $exclude = 0;
+ my $i;
+
+ #Do not match excluded file patterns
+
+ for ($i = $start; $i < $end; $i++) {
+ my $line = $typevalue[$i];
+ if ($line =~ m/^(.):\s*(.*)/) {
+ my $type = $1;
+ my $value = $2;
+ if ($type eq 'X') {
+ if (file_match_pattern($file, $value)) {
+ $exclude = 1;
+ last;
+ }
+ }
+ }
+ }
+
+ if (!$exclude) {
+ for ($i = $start; $i < $end; $i++) {
+ my $line = $typevalue[$i];
+ if ($line =~ m/^(.):\s*(.*)/) {
+ my $type = $1;
+ my $value = $2;
+ if ($type eq 'F') {
+ if (file_match_pattern($file, $value)) {
+ my $value_pd = ($value =~ tr@/@@);
+ my $file_pd = ($file =~ tr@/@@);
+ $value_pd++ if (substr($value,-1,1) ne "/");
+ $value_pd = -1 if ($value =~ /^\.\*/);
+ if ($value_pd >= $file_pd &&
+ range_is_maintained($start, $end) &&
+ range_has_maintainer($start, $end)) {
+ $exact_pattern_match_hash{$file} = 1;
+ }
+ if ($pattern_depth == 0 ||
+ (($file_pd - $value_pd) < $pattern_depth)) {
+ $hash{$tvi} = $value_pd;
+ }
+ }
+ }
+ }
+ }
+ }
+ $tvi = $end + 1;
+ }
+
+ foreach my $line (sort {$hash{$b} <=> $hash{$a}} keys %hash) {
+ add_categories($line);
+ if ($sections) {
+ my $i;
+ my $start = find_starting_index($line);
+ my $end = find_ending_index($line);
+ for ($i = $start; $i < $end; $i++) {
+ my $line = $typevalue[$i];
+ if ($line =~ /^[FX]:/) { ##Restore file patterns
+ $line =~ s/([^\\])\.([^\*])/$1\?$2/g;
+ $line =~ s/([^\\])\.$/$1\?/g; ##Convert . back to ?
+ $line =~ s/\\\./\./g; ##Convert \. to .
+ $line =~ s/\.\*/\*/g; ##Convert .* to *
+ }
+ $line =~ s/^([A-Z]):/$1:\t/g;
+ print("$line\n");
+ }
+ print("\n");
+ }
+ }
+ }
+
+ if ($keywords) {
+ @keyword_tvi = sort_and_uniq(@keyword_tvi);
+ foreach my $line (@keyword_tvi) {
+ add_categories($line);
+ }
+ }
+
+ foreach my $email (@email_to, @list_to) {
+ $email->[0] = deduplicate_email($email->[0]);
+ }
+
+ if ($email) {
+ if (! $interactive) {
+ $email_git_fallback = 0 if @email_to > 0 || $email_git || $email_git_blame;
+ if ($email_git_fallback) {
+ print STDERR "get_maintainer.pl: No maintainers found, printing recent contributors.\n";
+ print STDERR "get_maintainer.pl: Do not blindly cc: them on patches! Use common sense.\n";
+ print STDERR "\n";
+ }
+ }
+
+ foreach my $file (@files) {
+ if ($email_git || ($email_git_fallback &&
+ !$exact_pattern_match_hash{$file})) {
+ vcs_file_signoffs($file);
+ }
+ if ($email_git_blame) {
+ vcs_file_blame($file);
+ }
+ }
+
+ foreach my $email (@file_emails) {
+ my ($name, $address) = parse_email($email);
+
+ my $tmp_email = format_email($name, $address, $email_usename);
+ push_email_address($tmp_email, '');
+ add_role($tmp_email, 'in file');
+ }
+ }
+
+ my @to = ();
+ if ($email || $email_list) {
+ if ($email) {
+ @to = (@to, @email_to);
+ }
+ if ($email_list) {
+ @to = (@to, @list_to);
+ }
+ }
+
+ if ($interactive) {
+ @to = interactive_get_maintainers(\@to);
+ }
+
+ return @to;
+}
+
+sub file_match_pattern {
+ my ($file, $pattern) = @_;
+ if (substr($pattern, -1) eq "/") {
+ if ($file =~ m@^$pattern@) {
+ return 1;
+ }
+ } else {
+ if ($file =~ m@^$pattern@) {
+ my $s1 = ($file =~ tr@/@@);
+ my $s2 = ($pattern =~ tr@/@@);
+ if ($s1 == $s2) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+sub usage {
+ print <<EOT;
+usage: $P [options] patchfile
+ $P [options] -f file|directory
+version: $V
+
+MAINTAINER field selection options:
+ --email => print email address(es) if any
+ --git => include recent git \*-by: signers
+ --git-all-signature-types => include signers regardless of signature type
+ or use only ${signature_pattern} signers (default: $email_git_all_signature_types)
+ --git-fallback => use git when no exact MAINTAINERS pattern (default: $email_git_fallback)
+ --git-min-signatures => number of signatures required (default: $email_git_min_signatures)
+ --git-max-maintainers => maximum maintainers to add (default: $email_git_max_maintainers)
+ --git-min-percent => minimum percentage of commits required (default: $email_git_min_percent)
+ --git-blame => use git blame to find modified commits for patch or file
+ --git-since => git history to use (default: $email_git_since)
+ --hg-since => hg history to use (default: $email_hg_since)
+ --interactive => display a menu (mostly useful if used with the --git option)
+ --m => include maintainer(s) if any
+ --r => include reviewer(s) if any
+ --n => include name 'Full Name <addr\(a)domain.tld>'
+ --l => include list(s) if any
+ --s => include subscriber only list(s) if any
+ --remove-duplicates => minimize duplicate email names/addresses
+ --roles => show roles (status:subsystem, git-signer, list, etc...)
+ --rolestats => show roles and statistics (commits/total_commits, %)
+ --file-emails => add email addresses found in -f file (default: 0 (off))
+ --scm => print SCM tree(s) if any
+ --status => print status if any
+ --subsystem => print subsystem name if any
+ --web => print website(s) if any
+
+Output type options:
+ --separator [, ] => separator for multiple entries on 1 line
+ using --separator also sets --nomultiline if --separator is not [, ]
+ --multiline => print 1 entry per line
+
+Other options:
+ --pattern-depth => Number of pattern directory traversals (default: 0 (all))
+ --keywords => scan patch for keywords (default: $keywords)
+ --sections => print all of the subsystem sections with pattern matches
+ --mailmap => use .mailmap file (default: $email_use_mailmap)
+ --version => show version
+ --help => show this help information
+
+Default options:
+ [--email --nogit --git-fallback --m --r --n --l --multiline --pattern-depth=0
+ --remove-duplicates --rolestats]
+
+Notes:
+ Using "-f directory" may give unexpected results:
+ Used with "--git", git signators for _all_ files in and below
+ directory are examined as git recurses directories.
+ Any specified X: (exclude) pattern matches are _not_ ignored.
+ Used with "--nogit", directory is used as a pattern match,
+ no individual file within the directory or subdirectory
+ is matched.
+ Used with "--git-blame", does not iterate all files in directory
+ Using "--git-blame" is slow and may add old committers and authors
+ that are no longer active maintainers to the output.
+ Using "--roles" or "--rolestats" with git send-email --cc-cmd or any
+ other automated tools that expect only ["name"] <email address>
+ may not work because of additional output after <email address>.
+ Using "--rolestats" and "--git-blame" shows the #/total=% commits,
+ not the percentage of the entire file authored. # of commits is
+ not a good measure of amount of code authored. 1 major commit may
+ contain a thousand lines, 5 trivial commits may modify a single line.
+ If git is not installed, but mercurial (hg) is installed and an .hg
+ repository exists, the following options apply to mercurial:
+ --git,
+ --git-min-signatures, --git-max-maintainers, --git-min-percent, and
+ --git-blame
+ Use --hg-since not --git-since to control date selection
+ File ".get_maintainer.conf", if it exists in the libvirt source root
+ directory, can change whatever get_maintainer defaults are desired.
+ Entries in this file can be any command line argument.
+ This file is prepended to any additional command line arguments.
+ Multiple lines and # comments are allowed.
+EOT
+}
+
+sub top_of_tree {
+ my ($lk_path) = @_;
+
+ if ($lk_path ne "" && substr($lk_path,length($lk_path)-1,1) ne "/") {
+ $lk_path .= "/";
+ }
+ if ( (-f "${lk_path}COPYING")
+ && (-f "${lk_path}MAINTAINERS")
+ && (-f "${lk_path}Makefile.am")
+ && (-d "${lk_path}docs")
+ && (-f "${lk_path}m4/virt-lib.m4")
+ && (-f "${lk_path}src/libvirt.c")) {
+ return 1;
+ }
+ return 0;
+}
+
+sub parse_email {
+ my ($formatted_email) = @_;
+
+ my $name = "";
+ my $address = "";
+
+ if ($formatted_email =~ /^([^<]+)<(.+\@.*)>.*$/) {
+ $name = $1;
+ $address = $2;
+ } elsif ($formatted_email =~ /^\s*<(.+\@\S*)>.*$/) {
+ $address = $1;
+ } elsif ($formatted_email =~ /^(.+\(a)\S*).*$/) {
+ $address = $1;
+ }
+
+ $name =~ s/^\s+|\s+$//g;
+ $name =~ s/^\"|\"$//g;
+ $address =~ s/^\s+|\s+$//g;
+
+ if ($name =~ /[^\w \-]/i) { ##has "must quote" chars
+ $name =~ s/(?<!\\)"/\\"/g; ##escape quotes
+ $name = "\"$name\"";
+ }
+
+ return ($name, $address);
+}
+
+sub format_email {
+ my ($name, $address, $usename) = @_;
+
+ my $formatted_email;
+
+ $name =~ s/^\s+|\s+$//g;
+ $name =~ s/^\"|\"$//g;
+ $address =~ s/^\s+|\s+$//g;
+
+ if ($name =~ /[^\w \-]/i) { ##has "must quote" chars
+ $name =~ s/(?<!\\)"/\\"/g; ##escape quotes
+ $name = "\"$name\"";
+ }
+
+ if ($usename) {
+ if ("$name" eq "") {
+ $formatted_email = "$address";
+ } else {
+ $formatted_email = "$name <$address>";
+ }
+ } else {
+ $formatted_email = $address;
+ }
+
+ return $formatted_email;
+}
+
+sub find_first_section {
+ my $index = 0;
+
+ while ($index < @typevalue) {
+ my $tv = $typevalue[$index];
+ if (($tv =~ m/^(.):\s*(.*)/)) {
+ last;
+ }
+ $index++;
+ }
+
+ return $index;
+}
+
+sub find_starting_index {
+ my ($index) = @_;
+
+ while ($index > 0) {
+ my $tv = $typevalue[$index];
+ if (!($tv =~ m/^(.):\s*(.*)/)) {
+ last;
+ }
+ $index--;
+ }
+
+ return $index;
+}
+
+sub find_ending_index {
+ my ($index) = @_;
+
+ while ($index < @typevalue) {
+ my $tv = $typevalue[$index];
+ if (!($tv =~ m/^(.):\s*(.*)/)) {
+ last;
+ }
+ $index++;
+ }
+
+ return $index;
+}
+
+sub get_subsystem_name {
+ my ($index) = @_;
+
+ my $start = find_starting_index($index);
+
+ my $subsystem = $typevalue[$start];
+ if (length($subsystem) > 20) {
+ $subsystem = substr($subsystem, 0, 17);
+ $subsystem =~ s/\s*$//;
+ $subsystem = $subsystem . "...";
+ }
+ return $subsystem;
+}
+
+sub get_maintainer_role {
+ my ($index) = @_;
+
+ my $i;
+ my $start = find_starting_index($index);
+ my $end = find_ending_index($index);
+
+ my $role = "unknown";
+ my $subsystem = get_subsystem_name($index);
+
+ for ($i = $start + 1; $i < $end; $i++) {
+ my $tv = $typevalue[$i];
+ if ($tv =~ m/^(.):\s*(.*)/) {
+ my $ptype = $1;
+ my $pvalue = $2;
+ if ($ptype eq "S") {
+ $role = $pvalue;
+ }
+ }
+ }
+
+ $role = lc($role);
+ if ($role eq "supported") {
+ $role = "supporter";
+ } elsif ($role eq "maintained") {
+ $role = "maintainer";
+ } elsif ($role eq "odd fixes") {
+ $role = "odd fixer";
+ } elsif ($role eq "orphan") {
+ $role = "orphan minder";
+ } elsif ($role eq "obsolete") {
+ $role = "obsolete minder";
+ } elsif ($role eq "buried alive in reporters") {
+ $role = "chief penguin";
+ }
+
+ return $role . ":" . $subsystem;
+}
+
+sub get_list_role {
+ my ($index) = @_;
+
+ my $subsystem = get_subsystem_name($index);
+
+ if ($subsystem eq "THE REST") {
+ $subsystem = "";
+ }
+
+ return $subsystem;
+}
+
+sub add_categories {
+ my ($index) = @_;
+
+ my $i;
+ my $start = find_starting_index($index);
+ my $end = find_ending_index($index);
+
+ push(@subsystem, $typevalue[$start]);
+
+ for ($i = $start + 1; $i < $end; $i++) {
+ my $tv = $typevalue[$i];
+ if ($tv =~ m/^(.):\s*(.*)/) {
+ my $ptype = $1;
+ my $pvalue = $2;
+ if ($ptype eq "L") {
+ my $list_address = $pvalue;
+ my $list_additional = "";
+ my $list_role = get_list_role($i);
+
+ if ($list_role ne "") {
+ $list_role = ":" . $list_role;
+ }
+ if ($list_address =~ m/([^\s]+)\s+(.*)$/) {
+ $list_address = $1;
+ $list_additional = $2;
+ }
+ if ($list_additional =~ m/subscribers-only/) {
+ if ($email_subscriber_list) {
+ if (!$hash_list_to{lc($list_address)}) {
+ $hash_list_to{lc($list_address)} = 1;
+ push(@list_to, [$list_address,
+ "subscriber list${list_role}"]);
+ }
+ }
+ } else {
+ if ($email_list) {
+ if (!$hash_list_to{lc($list_address)}) {
+ $hash_list_to{lc($list_address)} = 1;
+ if ($list_additional =~ m/moderated/) {
+ push(@list_to, [$list_address,
+ "moderated list${list_role}"]);
+ } else {
+ push(@list_to, [$list_address,
+ "open list${list_role}"]);
+ }
+ }
+ }
+ }
+ } elsif ($ptype eq "M") {
+ my ($name, $address) = parse_email($pvalue);
+ if ($name eq "") {
+ if ($i > 0) {
+ my $tv = $typevalue[$i - 1];
+ if ($tv =~ m/^(.):\s*(.*)/) {
+ if ($1 eq "P") {
+ $name = $2;
+ $pvalue = format_email($name, $address, $email_usename);
+ }
+ }
+ }
+ }
+ if ($email_maintainer) {
+ my $role = get_maintainer_role($i);
+ push_email_addresses($pvalue, $role);
+ }
+ } elsif ($ptype eq "R") {
+ my ($name, $address) = parse_email($pvalue);
+ if ($name eq "") {
+ if ($i > 0) {
+ my $tv = $typevalue[$i - 1];
+ if ($tv =~ m/^(.):\s*(.*)/) {
+ if ($1 eq "P") {
+ $name = $2;
+ $pvalue = format_email($name, $address, $email_usename);
+ }
+ }
+ }
+ }
+ if ($email_reviewer) {
+ my $subsystem = get_subsystem_name($i);
+ push_email_addresses($pvalue, "reviewer:$subsystem");
+ }
+ } elsif ($ptype eq "T") {
+ push(@scm, $pvalue);
+ } elsif ($ptype eq "W") {
+ push(@web, $pvalue);
+ } elsif ($ptype eq "S") {
+ push(@status, $pvalue);
+ }
+ }
+ }
+}
+
+sub email_inuse {
+ my ($name, $address) = @_;
+
+ return 1 if (($name eq "") && ($address eq ""));
+ return 1 if (($name ne "") && exists($email_hash_name{lc($name)}));
+ return 1 if (($address ne "") && exists($email_hash_address{lc($address)}));
+
+ return 0;
+}
+
+sub push_email_address {
+ my ($line, $role) = @_;
+
+ my ($name, $address) = parse_email($line);
+
+ if ($address eq "") {
+ return 0;
+ }
+
+ if (!$email_remove_duplicates) {
+ push(@email_to, [format_email($name, $address, $email_usename), $role]);
+ } elsif (!email_inuse($name, $address)) {
+ push(@email_to, [format_email($name, $address, $email_usename), $role]);
+ $email_hash_name{lc($name)}++ if ($name ne "");
+ $email_hash_address{lc($address)}++;
+ }
+
+ return 1;
+}
+
+sub push_email_addresses {
+ my ($address, $role) = @_;
+
+ my @address_list = ();
+
+ if (rfc822_valid($address)) {
+ push_email_address($address, $role);
+ } elsif (@address_list = rfc822_validlist($address)) {
+ my $array_count = shift(@address_list);
+ while (my $entry = shift(@address_list)) {
+ push_email_address($entry, $role);
+ }
+ } else {
+ if (!push_email_address($address, $role)) {
+ warn("Invalid MAINTAINERS address: '" . $address . "'\n");
+ }
+ }
+}
+
+sub add_role {
+ my ($line, $role) = @_;
+
+ my ($name, $address) = parse_email($line);
+ my $email = format_email($name, $address, $email_usename);
+
+ foreach my $entry (@email_to) {
+ if ($email_remove_duplicates) {
+ my ($entry_name, $entry_address) = parse_email($entry->[0]);
+ if (($name eq $entry_name || $address eq $entry_address)
+ && ($role eq "" || !($entry->[1] =~ m/$role/))
+ ) {
+ if ($entry->[1] eq "") {
+ $entry->[1] = "$role";
+ } else {
+ $entry->[1] = "$entry->[1],$role";
+ }
+ }
+ } else {
+ if ($email eq $entry->[0]
+ && ($role eq "" || !($entry->[1] =~ m/$role/))
+ ) {
+ if ($entry->[1] eq "") {
+ $entry->[1] = "$role";
+ } else {
+ $entry->[1] = "$entry->[1],$role";
+ }
+ }
+ }
+ }
+}
+
+sub which {
+ my ($bin) = @_;
+
+ foreach my $path (split(/:/, $ENV{PATH})) {
+ if (-e "$path/$bin") {
+ return "$path/$bin";
+ }
+ }
+
+ return "";
+}
+
+sub which_conf {
+ my ($conf) = @_;
+
+ foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
+ if (-e "$path/$conf") {
+ return "$path/$conf";
+ }
+ }
+
+ return "";
+}
+
+sub mailmap_email {
+ my ($line) = @_;
+
+ my ($name, $address) = parse_email($line);
+ my $email = format_email($name, $address, 1);
+ my $real_name = $name;
+ my $real_address = $address;
+
+ if (exists $mailmap->{names}->{$email} ||
+ exists $mailmap->{addresses}->{$email}) {
+ if (exists $mailmap->{names}->{$email}) {
+ $real_name = $mailmap->{names}->{$email};
+ }
+ if (exists $mailmap->{addresses}->{$email}) {
+ $real_address = $mailmap->{addresses}->{$email};
+ }
+ } else {
+ if (exists $mailmap->{names}->{$address}) {
+ $real_name = $mailmap->{names}->{$address};
+ }
+ if (exists $mailmap->{addresses}->{$address}) {
+ $real_address = $mailmap->{addresses}->{$address};
+ }
+ }
+ return format_email($real_name, $real_address, 1);
+}
+
+sub mailmap {
+ my (@addresses) = @_;
+
+ my @mapped_emails = ();
+ foreach my $line (@addresses) {
+ push(@mapped_emails, mailmap_email($line));
+ }
+ merge_by_realname(@mapped_emails) if ($email_use_mailmap);
+ return @mapped_emails;
+}
+
+sub merge_by_realname {
+ my %address_map;
+ my (@emails) = @_;
+
+ foreach my $email (@emails) {
+ my ($name, $address) = parse_email($email);
+ if (exists $address_map{$name}) {
+ $address = $address_map{$name};
+ $email = format_email($name, $address, 1);
+ } else {
+ $address_map{$name} = $address;
+ }
+ }
+}
+
+sub git_execute_cmd {
+ my ($cmd) = @_;
+ my @lines = ();
+
+ my $output = `$cmd`;
+ $output =~ s/^\s*//gm;
+ @lines = split("\n", $output);
+
+ return @lines;
+}
+
+sub hg_execute_cmd {
+ my ($cmd) = @_;
+ my @lines = ();
+
+ my $output = `$cmd`;
+ @lines = split("\n", $output);
+
+ return @lines;
+}
+
+sub extract_formatted_signatures {
+ my (@signature_lines) = @_;
+
+ my @type = @signature_lines;
+
+ s/\s*(.*):.*/$1/ for (@type);
+
+ # cut -f2- -d":"
+ s/\s*.*:\s*(.+)\s*/$1/ for (@signature_lines);
+
+## Reformat email addresses (with names) to avoid badly written signatures
+
+ foreach my $signer (@signature_lines) {
+ $signer = deduplicate_email($signer);
+ }
+
+ return (\@type, \@signature_lines);
+}
+
+sub vcs_find_signers {
+ my ($cmd) = @_;
+ my $commits;
+ my @lines = ();
+ my @signatures = ();
+
+ @lines = &{$VCS_cmds{"execute_cmd"}}($cmd);
+
+ my $pattern = $VCS_cmds{"commit_pattern"};
+
+ $commits = grep(/$pattern/, @lines); # of commits
+
+ @signatures = grep(/^[ \t]*${signature_pattern}.*\@.*$/, @lines);
+
+ return (0, @signatures) if !@signatures;
+
+ save_commits_by_author(@lines) if ($interactive);
+ save_commits_by_signer(@lines) if ($interactive);
+
+ my ($types_ref, $signers_ref) = extract_formatted_signatures(@signatures);
+
+ return ($commits, @$signers_ref);
+}
+
+sub vcs_find_author {
+ my ($cmd) = @_;
+ my @lines = ();
+
+ @lines = &{$VCS_cmds{"execute_cmd"}}($cmd);
+
+ return @lines if !@lines;
+
+ my @authors = ();
+ foreach my $line (@lines) {
+ if ($line =~ m/$VCS_cmds{"author_pattern"}/) {
+ my $author = $1;
+ my ($name, $address) = parse_email($author);
+ $author = format_email($name, $address, 1);
+ push(@authors, $author);
+ }
+ }
+
+ save_commits_by_author(@lines) if ($interactive);
+ save_commits_by_signer(@lines) if ($interactive);
+
+ return @authors;
+}
+
+sub vcs_save_commits {
+ my ($cmd) = @_;
+ my @lines = ();
+ my @commits = ();
+
+ @lines = &{$VCS_cmds{"execute_cmd"}}($cmd);
+
+ foreach my $line (@lines) {
+ if ($line =~ m/$VCS_cmds{"blame_commit_pattern"}/) {
+ push(@commits, $1);
+ }
+ }
+
+ return @commits;
+}
+
+sub vcs_blame {
+ my ($file) = @_;
+ my $cmd;
+ my @commits = ();
+
+ return @commits if (!(-f $file));
+
+ if (@range && $VCS_cmds{"blame_range_cmd"} eq "") {
+ my @all_commits = ();
+
+ $cmd = $VCS_cmds{"blame_file_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #interpolate $cmd
+ @all_commits = vcs_save_commits($cmd);
+
+ foreach my $file_range_diff (@range) {
+ next if (!($file_range_diff =~ m/(.+):(.+):(.+)/));
+ my $diff_file = $1;
+ my $diff_start = $2;
+ my $diff_length = $3;
+ next if ("$file" ne "$diff_file");
+ for (my $i = $diff_start; $i < $diff_start + $diff_length; $i++) {
+ push(@commits, $all_commits[$i]);
+ }
+ }
+ } elsif (@range) {
+ foreach my $file_range_diff (@range) {
+ next if (!($file_range_diff =~ m/(.+):(.+):(.+)/));
+ my $diff_file = $1;
+ my $diff_start = $2;
+ my $diff_length = $3;
+ next if ("$file" ne "$diff_file");
+ $cmd = $VCS_cmds{"blame_range_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #interpolate $cmd
+ push(@commits, vcs_save_commits($cmd));
+ }
+ } else {
+ $cmd = $VCS_cmds{"blame_file_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #interpolate $cmd
+ @commits = vcs_save_commits($cmd);
+ }
+
+ foreach my $commit (@commits) {
+ $commit =~ s/^\^//g;
+ }
+
+ return @commits;
+}
+
+my $printed_novcs = 0;
+sub vcs_exists {
+ %VCS_cmds = %VCS_cmds_git;
+ return 1 if eval $VCS_cmds{"available"};
+ %VCS_cmds = %VCS_cmds_hg;
+ return 2 if eval $VCS_cmds{"available"};
+ %VCS_cmds = ();
+ if (!$printed_novcs) {
+ warn("$P: No supported VCS found. Add --nogit to options?\n");
+ warn("Using a git repository produces better results.\n");
+ warn("Try latest git repository using:\n");
+ warn("git clone git://libvirt.org/libvirt.git\n");
+ $printed_novcs = 1;
+ }
+ return 0;
+}
+
+sub vcs_is_git {
+ vcs_exists();
+ return $vcs_used == 1;
+}
+
+sub vcs_is_hg {
+ return $vcs_used == 2;
+}
+
+sub interactive_get_maintainers {
+ my ($list_ref) = @_;
+ my @list = @$list_ref;
+
+ vcs_exists();
+
+ my %selected;
+ my %authored;
+ my %signed;
+ my $count = 0;
+ my $maintained = 0;
+ foreach my $entry (@list) {
+ $maintained = 1 if ($entry->[1] =~ /^(maintainer|supporter)/i);
+ $selected{$count} = 1;
+ $authored{$count} = 0;
+ $signed{$count} = 0;
+ $count++;
+ }
+
+ #menu loop
+ my $done = 0;
+ my $print_options = 0;
+ my $redraw = 1;
+ while (!$done) {
+ $count = 0;
+ if ($redraw) {
+ printf STDERR "\n%1s %2s %-65s",
+ "*", "#", "email/list and role:stats";
+ if ($email_git ||
+ ($email_git_fallback && !$maintained) ||
+ $email_git_blame) {
+ print STDERR "auth sign";
+ }
+ print STDERR "\n";
+ foreach my $entry (@list) {
+ my $email = $entry->[0];
+ my $role = $entry->[1];
+ my $sel = "";
+ $sel = "*" if ($selected{$count});
+ my $commit_author = $commit_author_hash{$email};
+ my $commit_signer = $commit_signer_hash{$email};
+ my $authored = 0;
+ my $signed = 0;
+ $authored++ for (@{$commit_author});
+ $signed++ for (@{$commit_signer});
+ printf STDERR "%1s %2d %-65s", $sel, $count + 1, $email;
+ printf STDERR "%4d %4d", $authored, $signed
+ if ($authored > 0 || $signed > 0);
+ printf STDERR "\n %s\n", $role;
+ if ($authored{$count}) {
+ my $commit_author = $commit_author_hash{$email};
+ foreach my $ref (@{$commit_author}) {
+ print STDERR " Author: @{$ref}[1]\n";
+ }
+ }
+ if ($signed{$count}) {
+ my $commit_signer = $commit_signer_hash{$email};
+ foreach my $ref (@{$commit_signer}) {
+ print STDERR " @{$ref}[2]: @{$ref}[1]\n";
+ }
+ }
+
+ $count++;
+ }
+ }
+ my $date_ref = \$email_git_since;
+ $date_ref = \$email_hg_since if (vcs_is_hg());
+ if ($print_options) {
+ $print_options = 0;
+ if (vcs_exists()) {
+ print STDERR <<EOT
+
+Version Control options:
+g use git history [$email_git]
+gf use git-fallback [$email_git_fallback]
+b use git blame [$email_git_blame]
+bs use blame signatures [$email_git_blame_signatures]
+c# minimum commits [$email_git_min_signatures]
+%# min percent [$email_git_min_percent]
+d# history to use [$$date_ref]
+x# max maintainers [$email_git_max_maintainers]
+t all signature types [$email_git_all_signature_types]
+m use .mailmap [$email_use_mailmap]
+EOT
+ }
+ print STDERR <<EOT
+
+Additional options:
+0 toggle all
+tm toggle maintainers
+tg toggle git entries
+tl toggle open list entries
+ts toggle subscriber list entries
+f emails in file [$file_emails]
+k keywords in file [$keywords]
+r remove duplicates [$email_remove_duplicates]
+p# pattern match depth [$pattern_depth]
+EOT
+ }
+ print STDERR
+"\n#(toggle), A#(author), S#(signed) *(all), ^(none), O(options), Y(approve): ";
+
+ my $input = <STDIN>;
+ chomp($input);
+
+ $redraw = 1;
+ my $rerun = 0;
+ my @wish = split(/[, ]+/, $input);
+ foreach my $nr (@wish) {
+ $nr = lc($nr);
+ my $sel = substr($nr, 0, 1);
+ my $str = substr($nr, 1);
+ my $val = 0;
+ $val = $1 if $str =~ /^(\d+)$/;
+
+ if ($sel eq "y") {
+ $interactive = 0;
+ $done = 1;
+ $output_rolestats = 0;
+ $output_roles = 0;
+ last;
+ } elsif ($nr =~ /^\d+$/ && $nr > 0 && $nr <= $count) {
+ $selected{$nr - 1} = !$selected{$nr - 1};
+ } elsif ($sel eq "*" || $sel eq '^') {
+ my $toggle = 0;
+ $toggle = 1 if ($sel eq '*');
+ for (my $i = 0; $i < $count; $i++) {
+ $selected{$i} = $toggle;
+ }
+ } elsif ($sel eq "0") {
+ for (my $i = 0; $i < $count; $i++) {
+ $selected{$i} = !$selected{$i};
+ }
+ } elsif ($sel eq "t") {
+ if (lc($str) eq "m") {
+ for (my $i = 0; $i < $count; $i++) {
+ $selected{$i} = !$selected{$i}
+ if ($list[$i]->[1] =~ /^(maintainer|supporter)/i);
+ }
+ } elsif (lc($str) eq "g") {
+ for (my $i = 0; $i < $count; $i++) {
+ $selected{$i} = !$selected{$i}
+ if ($list[$i]->[1] =~ /^(author|commit|signer)/i);
+ }
+ } elsif (lc($str) eq "l") {
+ for (my $i = 0; $i < $count; $i++) {
+ $selected{$i} = !$selected{$i}
+ if ($list[$i]->[1] =~ /^(open list)/i);
+ }
+ } elsif (lc($str) eq "s") {
+ for (my $i = 0; $i < $count; $i++) {
+ $selected{$i} = !$selected{$i}
+ if ($list[$i]->[1] =~ /^(subscriber list)/i);
+ }
+ }
+ } elsif ($sel eq "a") {
+ if ($val > 0 && $val <= $count) {
+ $authored{$val - 1} = !$authored{$val - 1};
+ } elsif ($str eq '*' || $str eq '^') {
+ my $toggle = 0;
+ $toggle = 1 if ($str eq '*');
+ for (my $i = 0; $i < $count; $i++) {
+ $authored{$i} = $toggle;
+ }
+ }
+ } elsif ($sel eq "s") {
+ if ($val > 0 && $val <= $count) {
+ $signed{$val - 1} = !$signed{$val - 1};
+ } elsif ($str eq '*' || $str eq '^') {
+ my $toggle = 0;
+ $toggle = 1 if ($str eq '*');
+ for (my $i = 0; $i < $count; $i++) {
+ $signed{$i} = $toggle;
+ }
+ }
+ } elsif ($sel eq "o") {
+ $print_options = 1;
+ $redraw = 1;
+ } elsif ($sel eq "g") {
+ if ($str eq "f") {
+ bool_invert(\$email_git_fallback);
+ } else {
+ bool_invert(\$email_git);
+ }
+ $rerun = 1;
+ } elsif ($sel eq "b") {
+ if ($str eq "s") {
+ bool_invert(\$email_git_blame_signatures);
+ } else {
+ bool_invert(\$email_git_blame);
+ }
+ $rerun = 1;
+ } elsif ($sel eq "c") {
+ if ($val > 0) {
+ $email_git_min_signatures = $val;
+ $rerun = 1;
+ }
+ } elsif ($sel eq "x") {
+ if ($val > 0) {
+ $email_git_max_maintainers = $val;
+ $rerun = 1;
+ }
+ } elsif ($sel eq "%") {
+ if ($str ne "" && $val >= 0) {
+ $email_git_min_percent = $val;
+ $rerun = 1;
+ }
+ } elsif ($sel eq "d") {
+ if (vcs_is_git()) {
+ $email_git_since = $str;
+ } elsif (vcs_is_hg()) {
+ $email_hg_since = $str;
+ }
+ $rerun = 1;
+ } elsif ($sel eq "t") {
+ bool_invert(\$email_git_all_signature_types);
+ $rerun = 1;
+ } elsif ($sel eq "f") {
+ bool_invert(\$file_emails);
+ $rerun = 1;
+ } elsif ($sel eq "r") {
+ bool_invert(\$email_remove_duplicates);
+ $rerun = 1;
+ } elsif ($sel eq "m") {
+ bool_invert(\$email_use_mailmap);
+ read_mailmap();
+ $rerun = 1;
+ } elsif ($sel eq "k") {
+ bool_invert(\$keywords);
+ $rerun = 1;
+ } elsif ($sel eq "p") {
+ if ($str ne "" && $val >= 0) {
+ $pattern_depth = $val;
+ $rerun = 1;
+ }
+ } elsif ($sel eq "h" || $sel eq "?") {
+ print STDERR <<EOT
+
+Interactive mode allows you to select the various maintainers, submitters,
+commit signers and mailing lists that could be CC'd on a patch.
+
+Any *'d entry is selected.
+
+If you have git or hg installed, you can choose to summarize the commit
+history of files in the patch. Also, each line of the current file can
+be matched to its commit author and that commits signers with blame.
+
+Various knobs exist to control the length of time for active commit
+tracking, the maximum number of commit authors and signers to add,
+and such.
+
+Enter selections at the prompt until you are satisfied that the selected
+maintainers are appropriate. You may enter multiple selections separated
+by either commas or spaces.
+
+EOT
+ } else {
+ print STDERR "invalid option: '$nr'\n";
+ $redraw = 0;
+ }
+ }
+ if ($rerun) {
+ print STDERR "git-blame can be very slow, please have patience..."
+ if ($email_git_blame);
+ goto &get_maintainers;
+ }
+ }
+
+ #drop not selected entries
+ $count = 0;
+ my @new_emailto = ();
+ foreach my $entry (@list) {
+ if ($selected{$count}) {
+ push(@new_emailto, $list[$count]);
+ }
+ $count++;
+ }
+ return @new_emailto;
+}
+
+sub bool_invert {
+ my ($bool_ref) = @_;
+
+ if ($$bool_ref) {
+ $$bool_ref = 0;
+ } else {
+ $$bool_ref = 1;
+ }
+}
+
+sub deduplicate_email {
+ my ($email) = @_;
+
+ my $matched = 0;
+ my ($name, $address) = parse_email($email);
+ $email = format_email($name, $address, 1);
+ $email = mailmap_email($email);
+
+ return $email if (!$email_remove_duplicates);
+
+ ($name, $address) = parse_email($email);
+
+ if ($name ne "" && $deduplicate_name_hash{lc($name)}) {
+ $name = $deduplicate_name_hash{lc($name)}->[0];
+ $address = $deduplicate_name_hash{lc($name)}->[1];
+ $matched = 1;
+ } elsif ($deduplicate_address_hash{lc($address)}) {
+ $name = $deduplicate_address_hash{lc($address)}->[0];
+ $address = $deduplicate_address_hash{lc($address)}->[1];
+ $matched = 1;
+ }
+ if (!$matched) {
+ $deduplicate_name_hash{lc($name)} = [ $name, $address ];
+ $deduplicate_address_hash{lc($address)} = [ $name, $address ];
+ }
+ $email = format_email($name, $address, 1);
+ $email = mailmap_email($email);
+ return $email;
+}
+
+sub save_commits_by_author {
+ my (@lines) = @_;
+
+ my @authors = ();
+ my @commits = ();
+ my @subjects = ();
+
+ foreach my $line (@lines) {
+ if ($line =~ m/$VCS_cmds{"author_pattern"}/) {
+ my $author = $1;
+ $author = deduplicate_email($author);
+ push(@authors, $author);
+ }
+ push(@commits, $1) if ($line =~ m/$VCS_cmds{"commit_pattern"}/);
+ push(@subjects, $1) if ($line =~ m/$VCS_cmds{"subject_pattern"}/);
+ }
+
+ for (my $i = 0; $i < @authors; $i++) {
+ my $exists = 0;
+ foreach my $ref(@{$commit_author_hash{$authors[$i]}}) {
+ if (@{$ref}[0] eq $commits[$i] &&
+ @{$ref}[1] eq $subjects[$i]) {
+ $exists = 1;
+ last;
+ }
+ }
+ if (!$exists) {
+ push(@{$commit_author_hash{$authors[$i]}},
+ [ ($commits[$i], $subjects[$i]) ]);
+ }
+ }
+}
+
+sub save_commits_by_signer {
+ my (@lines) = @_;
+
+ my $commit = "";
+ my $subject = "";
+
+ foreach my $line (@lines) {
+ $commit = $1 if ($line =~ m/$VCS_cmds{"commit_pattern"}/);
+ $subject = $1 if ($line =~ m/$VCS_cmds{"subject_pattern"}/);
+ if ($line =~ /^[ \t]*${signature_pattern}.*\@.*$/) {
+ my @signatures = ($line);
+ my ($types_ref, $signers_ref) = extract_formatted_signatures(@signatures);
+ my @types = @$types_ref;
+ my @signers = @$signers_ref;
+
+ my $type = $types[0];
+ my $signer = $signers[0];
+
+ $signer = deduplicate_email($signer);
+
+ my $exists = 0;
+ foreach my $ref(@{$commit_signer_hash{$signer}}) {
+ if (@{$ref}[0] eq $commit &&
+ @{$ref}[1] eq $subject &&
+ @{$ref}[2] eq $type) {
+ $exists = 1;
+ last;
+ }
+ }
+ if (!$exists) {
+ push(@{$commit_signer_hash{$signer}},
+ [ ($commit, $subject, $type) ]);
+ }
+ }
+ }
+}
+
+sub vcs_assign {
+ my ($role, $divisor, @lines) = @_;
+
+ my %hash;
+ my $count = 0;
+
+ return if (@lines <= 0);
+
+ if ($divisor <= 0) {
+ warn("Bad divisor in " . (caller(0))[3] . ": $divisor\n");
+ $divisor = 1;
+ }
+
+ @lines = mailmap(@lines);
+
+ return if (@lines <= 0);
+
+ @lines = sort(@lines);
+
+ # uniq -c
+ $hash{$_}++ for @lines;
+
+ # sort -rn
+ foreach my $line (sort {$hash{$b} <=> $hash{$a}} keys %hash) {
+ my $sign_offs = $hash{$line};
+ my $percent = $sign_offs * 100 / $divisor;
+
+ $percent = 100 if ($percent > 100);
+ $count++;
+ last if ($sign_offs < $email_git_min_signatures ||
+ $count > $email_git_max_maintainers ||
+ $percent < $email_git_min_percent);
+ push_email_address($line, '');
+ if ($output_rolestats) {
+ my $fmt_percent = sprintf("%.0f", $percent);
+ add_role($line, "$role:$sign_offs/$divisor=$fmt_percent%");
+ } else {
+ add_role($line, $role);
+ }
+ }
+}
+
+sub vcs_file_signoffs {
+ my ($file) = @_;
+
+ my @signers = ();
+ my $commits;
+
+ $vcs_used = vcs_exists();
+ return if (!$vcs_used);
+
+ my $cmd = $VCS_cmds{"find_signers_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; # interpolate $cmd
+
+ ($commits, @signers) = vcs_find_signers($cmd);
+
+ foreach my $signer (@signers) {
+ $signer = deduplicate_email($signer);
+ }
+
+ vcs_assign("commit_signer", $commits, @signers);
+}
+
+sub vcs_file_blame {
+ my ($file) = @_;
+
+ my @signers = ();
+ my @all_commits = ();
+ my @commits = ();
+ my $total_commits;
+ my $total_lines;
+
+ $vcs_used = vcs_exists();
+ return if (!$vcs_used);
+
+ @all_commits = vcs_blame($file);
+ @commits = uniq(@all_commits);
+ $total_commits = @commits;
+ $total_lines = @all_commits;
+
+ if ($email_git_blame_signatures) {
+ if (vcs_is_hg()) {
+ my $commit_count;
+ my @commit_signers = ();
+ my $commit = join(" -r ", @commits);
+ my $cmd;
+
+ $cmd = $VCS_cmds{"find_commit_signers_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #substitute variables in $cmd
+
+ ($commit_count, @commit_signers) = vcs_find_signers($cmd);
+
+ push(@signers, @commit_signers);
+ } else {
+ foreach my $commit (@commits) {
+ my $commit_count;
+ my @commit_signers = ();
+ my $cmd;
+
+ $cmd = $VCS_cmds{"find_commit_signers_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #substitute variables in $cmd
+
+ ($commit_count, @commit_signers) = vcs_find_signers($cmd);
+
+ push(@signers, @commit_signers);
+ }
+ }
+ }
+
+ if ($from_filename) {
+ if ($output_rolestats) {
+ my @blame_signers;
+ if (vcs_is_hg()) {{ # Double brace for last exit
+ my $commit_count;
+ my @commit_signers = ();
+ @commits = uniq(@commits);
+ @commits = sort(@commits);
+ my $commit = join(" -r ", @commits);
+ my $cmd;
+
+ $cmd = $VCS_cmds{"find_commit_author_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #substitute variables in $cmd
+
+ my @lines = ();
+
+ @lines = &{$VCS_cmds{"execute_cmd"}}($cmd);
+
+ last if !@lines;
+
+ my @authors = ();
+ foreach my $line (@lines) {
+ if ($line =~ m/$VCS_cmds{"author_pattern"}/) {
+ my $author = $1;
+ $author = deduplicate_email($author);
+ push(@authors, $author);
+ }
+ }
+
+ save_commits_by_author(@lines) if ($interactive);
+ save_commits_by_signer(@lines) if ($interactive);
+
+ push(@signers, @authors);
+ }}
+ else {
+ foreach my $commit (@commits) {
+ my $i;
+ my $cmd = $VCS_cmds{"find_commit_author_cmd"};
+ $cmd =~ s/(\$\w+)/$1/eeg; #interpolate $cmd
+ my @author = vcs_find_author($cmd);
+ next if !@author;
+
+ my $formatted_author = deduplicate_email($author[0]);
+
+ my $count = grep(/$commit/, @all_commits);
+ for ($i = 0; $i < $count ; $i++) {
+ push(@blame_signers, $formatted_author);
+ }
+ }
+ }
+ if (@blame_signers) {
+ vcs_assign("authored lines", $total_lines, @blame_signers);
+ }
+ }
+ foreach my $signer (@signers) {
+ $signer = deduplicate_email($signer);
+ }
+ vcs_assign("commits", $total_commits, @signers);
+ } else {
+ foreach my $signer (@signers) {
+ $signer = deduplicate_email($signer);
+ }
+ vcs_assign("modified commits", $total_commits, @signers);
+ }
+}
+
+sub uniq {
+ my (@parms) = @_;
+
+ my %saw;
+ @parms = grep(!$saw{$_}++, @parms);
+ return @parms;
+}
+
+sub sort_and_uniq {
+ my (@parms) = @_;
+
+ my %saw;
+ @parms = sort @parms;
+ @parms = grep(!$saw{$_}++, @parms);
+ return @parms;
+}
+
+sub clean_file_emails {
+ my (@file_emails) = @_;
+ my @fmt_emails = ();
+
+ foreach my $email (@file_emails) {
+ $email =~ s/[\(\<\{]{0,1}([A-Za-z0-9_\.\+-]+\(a)[A-Za-z0-9\.-]+)[\)\>\}]{0,1}/\<$1\>/g;
+ my ($name, $address) = parse_email($email);
+ if ($name eq '"[,\.]"') {
+ $name = "";
+ }
+
+ my @nw = split(/[^A-Za-zÀ-ÿ\'\,\.\+-]/, $name);
+ if (@nw > 2) {
+ my $first = $nw[@nw - 3];
+ my $middle = $nw[@nw - 2];
+ my $last = $nw[@nw - 1];
+
+ if (((length($first) == 1 && $first =~ m/[A-Za-z]/) ||
+ (length($first) == 2 && substr($first, -1) eq ".")) ||
+ (length($middle) == 1 ||
+ (length($middle) == 2 && substr($middle, -1) eq "."))) {
+ $name = "$first $middle $last";
+ } else {
+ $name = "$middle $last";
+ }
+ }
+
+ if (substr($name, -1) =~ /[,\.]/) {
+ $name = substr($name, 0, length($name) - 1);
+ } elsif (substr($name, -2) =~ /[,\.]"/) {
+ $name = substr($name, 0, length($name) - 2) . '"';
+ }
+
+ if (substr($name, 0, 1) =~ /[,\.]/) {
+ $name = substr($name, 1, length($name) - 1);
+ } elsif (substr($name, 0, 2) =~ /"[,\.]/) {
+ $name = '"' . substr($name, 2, length($name) - 2);
+ }
+
+ my $fmt_email = format_email($name, $address, $email_usename);
+ push(@fmt_emails, $fmt_email);
+ }
+ return @fmt_emails;
+}
+
+sub merge_email {
+ my @lines;
+ my %saw;
+
+ for (@_) {
+ my ($address, $role) = @$_;
+ if (!$saw{$address}) {
+ if ($output_roles) {
+ push(@lines, "$address ($role)");
+ } else {
+ push(@lines, $address);
+ }
+ $saw{$address} = 1;
+ }
+ }
+
+ return @lines;
+}
+
+sub output {
+ my (@parms) = @_;
+
+ if ($output_multiline) {
+ foreach my $line (@parms) {
+ print("${line}\n");
+ }
+ } else {
+ print(join($output_separator, @parms));
+ print("\n");
+ }
+}
+
+my $rfc822re;
+
+sub make_rfc822re {
+# Basic lexical tokens are specials, domain_literal, quoted_string, atom, and
+# comment. We must allow for rfc822_lwsp (or comments) after each of these.
+# This regexp will only work on addresses which have had comments stripped
+# and replaced with rfc822_lwsp.
+
+ my $specials = '()<>@,;:\\\\".\\[\\]';
+ my $controls = '\\000-\\037\\177';
+
+ my $dtext = "[^\\[\\]\\r\\\\]";
+ my $domain_literal = "\\[(?:$dtext|\\\\.)*\\]$rfc822_lwsp*";
+
+ my $quoted_string = "\"(?:[^\\\"\\r\\\\]|\\\\.|$rfc822_lwsp)*\"$rfc822_lwsp*";
+
+# Use zero-width assertion to spot the limit of an atom. A simple
+# $rfc822_lwsp* causes the regexp engine to hang occasionally.
+ my $atom = "[^$specials $controls]+(?:$rfc822_lwsp+|\\Z|(?=[\\[\"$specials]))";
+ my $word = "(?:$atom|$quoted_string)";
+ my $localpart = "$word(?:\\.$rfc822_lwsp*$word)*";
+
+ my $sub_domain = "(?:$atom|$domain_literal)";
+ my $domain = "$sub_domain(?:\\.$rfc822_lwsp*$sub_domain)*";
+
+ my $addr_spec = "$localpart\@$rfc822_lwsp*$domain";
+
+ my $phrase = "$word*";
+ my $route = "(?:\@$domain(?:,\@$rfc822_lwsp*$domain)*:$rfc822_lwsp*)";
+ my $route_addr = "\\<$rfc822_lwsp*$route?$addr_spec\\>$rfc822_lwsp*";
+ my $mailbox = "(?:$addr_spec|$phrase$route_addr)";
+
+ my $group = "$phrase:$rfc822_lwsp*(?:$mailbox(?:,\\s*$mailbox)*)?;\\s*";
+ my $address = "(?:$mailbox|$group)";
+
+ return "$rfc822_lwsp*$address";
+}
+
+sub rfc822_strip_comments {
+ my $s = shift;
+# Recursively remove comments, and replace with a single space. The simpler
+# regexps in the Email Addressing FAQ are imperfect - they will miss escaped
+# chars in atoms, for example.
+
+ while ($s =~ s/^((?:[^"\\]|\\.)*
+ (?:"(?:[^"\\]|\\.)*"(?:[^"\\]|\\.)*)*)
+ \((?:[^()\\]|\\.)*\)/$1 /osx) {}
+ return $s;
+}
+
+# valid: returns true if the parameter is an RFC822 valid address
+#
+sub rfc822_valid {
+ my $s = rfc822_strip_comments(shift);
+
+ if (!$rfc822re) {
+ $rfc822re = make_rfc822re();
+ }
+
+ return $s =~ m/^$rfc822re$/so && $s =~ m/^$rfc822_char*$/;
+}
+
+# validlist: In scalar context, returns true if the parameter is an RFC822
+# valid list of addresses.
+#
+# In list context, returns an empty list on failure (an invalid
+# address was found); otherwise a list whose first element is the
+# number of addresses found and whose remaining elements are the
+# addresses. This is needed to disambiguate failure (invalid)
+# from success with no addresses found, because an empty string is
+# a valid list.
+
+sub rfc822_validlist {
+ my $s = rfc822_strip_comments(shift);
+
+ if (!$rfc822re) {
+ $rfc822re = make_rfc822re();
+ }
+ # * null list items are valid according to the RFC
+ # * the '1' business is to aid in distinguishing failure from no results
+
+ my @r;
+ if ($s =~ m/^(?:$rfc822re)?(?:,(?:$rfc822re)?)*$/so &&
+ $s =~ m/^$rfc822_char*$/) {
+ while ($s =~ m/(?:^|,$rfc822_lwsp*)($rfc822re)/gos) {
+ push(@r, $1);
+ }
+ return wantarray ? (scalar(@r), @r) : 1;
+ }
+ return wantarray ? () : 0;
+}
--
2.17.0
5
5