diff options
author | 2014-09-12 07:01:44 +0000 | |
---|---|---|
committer | 2014-09-12 07:01:44 +0000 | |
commit | 1265b738db69fc6658e68fa4fe923d4b2cda4562 (patch) | |
tree | 8ce92b4a38a07f4b5dc2077cd3a7caabc511b624 /app-emulation/qemu | |
parent | EAPI=5; better icon install; tidy (diff) | |
download | historical-1265b738db69fc6658e68fa4fe923d4b2cda4562.tar.gz historical-1265b738db69fc6658e68fa4fe923d4b2cda4562.tar.bz2 historical-1265b738db69fc6658e68fa4fe923d4b2cda4562.zip |
Version bump.
Package-Manager: portage-2.2.10/cvs/Linux x86_64
Manifest-Sign-Key: 0xD2E96200
Diffstat (limited to 'app-emulation/qemu')
-rw-r--r-- | app-emulation/qemu/ChangeLog | 8 | ||||
-rw-r--r-- | app-emulation/qemu/Manifest | 31 | ||||
-rw-r--r-- | app-emulation/qemu/files/qemu-2.1.1-readlink-self.patch | 81 | ||||
-rw-r--r-- | app-emulation/qemu/qemu-2.1.1.ebuild | 595 |
4 files changed, 700 insertions, 15 deletions
diff --git a/app-emulation/qemu/ChangeLog b/app-emulation/qemu/ChangeLog index 6afd254e2a9d..601514cf0183 100644 --- a/app-emulation/qemu/ChangeLog +++ b/app-emulation/qemu/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for app-emulation/qemu # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu/ChangeLog,v 1.292 2014/09/06 10:15:43 vapier Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu/ChangeLog,v 1.293 2014/09/12 07:01:42 vapier Exp $ + +*qemu-2.1.1 (12 Sep 2014) + + 12 Sep 2014; Mike Frysinger <vapier@gentoo.org> + +files/qemu-2.1.1-readlink-self.patch, +qemu-2.1.1.ebuild: + Version bump. 06 Sep 2014; Mike Frysinger <vapier@gentoo.org> qemu-2.1.0-r1.ebuild, qemu-9999.ebuild: diff --git a/app-emulation/qemu/Manifest b/app-emulation/qemu/Manifest index 482c0acb1a7c..b0f9d422fece 100644 --- a/app-emulation/qemu/Manifest +++ b/app-emulation/qemu/Manifest @@ -10,32 +10,35 @@ AUX qemu-2.0.0-CVE-2014-0223.patch 1916 SHA256 a39ef614d175e5304c579fed2a1860899 AUX qemu-2.0.0-qcow-check-max-sizes.patch 1863 SHA256 b3dbd3b90f683350aba558e065e76683617a3c0fc73246430223cd5d05239435 SHA512 f07180158987350ed1fefde9dea391bdd0abf267f4cc81e3a339431e338aa7c664efe8e7c8d6474cf5dfe48782742127b28db2a3381d26b921d9df1b73690570 WHIRLPOOL 6f2f0586f2f89b611eafa186367fad66633118703c38af227f3259cc4fd112d274f3304020339369063f9c92283ecd2df0506df7a49f48ae2e4a2ec695132a4a AUX qemu-2.0.0-usb-post-load-checks.patch 1267 SHA256 e0eb00149f3a37d5e66ac4858fdf806894104980795ad97a2b1fc78671e298ae SHA512 edfa35f8ac1aab52034d85f99d5dac16fcb553b3c12e8d0541de8b0f10dd48908c289691f8145fcc2fc38676f76bbb8a90ea9169d9993bc689690ec71a9d1c9b WHIRLPOOL 99afb66c3734fbcc0ffcfde0210e875bf631a854132f1c945d69ecda29c8f5c37a20ca713471905fb85e61873b762abafc01223a1d782e4b7aafd218fe68026d AUX qemu-2.1.0-CVE-2014-5388.patch 1093 SHA256 df7c11ffb519f9a4c0db177359c5fe9772d5463fbd61d29905b8177e598d6887 SHA512 1f0c4b5b306f85a9a796b906cdd79106ea87a07217aee5b84ac45db0235440b55484591eeb4d0c05fbae6011879ac957304e82cb8a7b58ee77c550e32602367f WHIRLPOOL 33a09191ba765f72764ce5396e9a14c8f900efaf7e1707d535cadca38c46bf0dde0e99f6e8f0f37bd58ae512049edf78977976678088a1dc4d26f544e90cfc29 +AUX qemu-2.1.1-readlink-self.patch 2933 SHA256 3133ec1a0f0126d3362c9420602a1fdfc76fafacac8b41f5bd755e7542ee4188 SHA512 7ee06e119007e6dc08f254cbfdcc6de1c914181f60e69434190fe507a80b7d0f9e8682f0213d447481f39e145fcb0be2e118516238addb5c4326533fc0db143f WHIRLPOOL 54edcb4510546c69dedf78a2070f22e7ef2809b35a66dc2e5d356f2f1b22eea8baa5b17ed4a4d9860ee6b864fac92eb9d1bbb6daeb6e2d80e3cc702f32039996 AUX qemu-9999-cflags.patch 347 SHA256 fe3bcbe83e81225b2c722578a0a976fcb724419d5208bbd6d02fb543e80b7e12 SHA512 e1b8be744170d61a2155b23a8394db01f8af6dc70ec033e71b2ff46f72975704836d42b96d7904e5d462289c5f8f24317f2fb28698f18a77ab1de02829e585eb WHIRLPOOL 2d972c7e40292f424fd37a4c1af04d2be095c215211ec2e1d15d8457df553342ffc02a7d39985f817fbbf5342e422d30e439c35a925341cf9b852ca7ff15a308 AUX qemu-9999-virtfs-proxy-helper-accept.patch 973 SHA256 91cc9e024aa09ea3dd23ec52c561047656acc89f0ad0d5ddccce354c1ac4d282 SHA512 031cb1c35b479b18032f56a07fa2fa6d392a7f0919acd3636bf122ab7f75dcfbb5fc0e26e18a8a31a9888409f81c2e08438a1af999232418d940167c5031a92b WHIRLPOOL ea4dc08230289a147fd55d0bd9e32896cd4491130084fc45b4043f41caf611f07d4587cc485e6d25ba3f6fbc66939ed8faf3c2017bf33ab10e1885277fa3f6ff AUX qemu-binfmt.initd-r1 8078 SHA256 2560f1d12374a2dea74e18365ac3d759c2eab35eb9a77b989e1bb8346d9bc3f8 SHA512 82d8ebdb5a4c452f03281c28f074ea52acfb730f1c3ddf68de2ce496c7ca23fd379041948371b021355f00f9c260383fdecf47218ddf2764ab75d6ec8a7a2715 WHIRLPOOL a0f54e133fbda2fd050ef8168fee676a763bb94a890f8c1d99d44e37e4a29322d513d9f5ddad9247f44e3ee0ac779050a3b06cf909678fdfb9f46777701de492 AUX qemu-kvm-1.4 68 SHA256 8b1adf198129f001e75a2311fc420c168094d1084d2163cdf6a32b3b23c96137 SHA512 706fab4d155c410acc292e67fb354ce7dcd17f7e33f2ca8c9c44035ea128f8d36f89e27cf87ebe22721f5676be9e7f2ae5484fd000183c8ffd7854e02eb3d120 WHIRLPOOL ef795330b592cef8e3d92f52a77eb77a671e6aa1a47d07531917b5c1c09e72e5df1a44aea939b086e0a3c5ef2a5cea9223556a46ceae73e55300475c42f07067 DIST qemu-2.0.0.tar.bz2 12839647 SHA256 60cc1aa0cad39cec891f970bed60ca8a484f071adad4943123599ac223543a3b SHA512 8fe2e8faa66251aaea7d6017ee71675d5b05f93f92be7e2ad3e1d02af185b3d6c4069bd83a13fb1e35a3e8947aff76f22446b395f97ac18b6f7a99744202e3fa WHIRLPOOL 6b39916acdcaa5e22510afec8a972935e71064de9ff0a3f9a698a8142f66b130a24d0a38cc56a7a92dbdc78d5145abe743a9c6933f819ce9e682b7cffdac1508 DIST qemu-2.1.0.tar.bz2 23563306 SHA256 397e23184f4bf613589a8fe0c6542461dc2afdf17ed337e97e6fd2f31e8f8802 SHA512 8c00fd61432420229d762fa2ccf91cb8cec20206e2ec02ab2df13c6b3b9de7605fbfacb0fadd21f20f13c1de4c5216d8b11538738c0d0e5094582ded7c668f2e WHIRLPOOL 9d28aab8e20a5a60e85709d7a192a45425605693e54452f54decd65ecc77b504f1bc6ff60f5e9428314fb04911f966753f39a189adc8aa85776fd3c49b5a6858 +DIST qemu-2.1.1.tar.bz2 23567029 SHA256 be57bac8a8a1b47d76eecaa58b7eda390b7be8e5fdcbecfdf1a174380fc493e9 SHA512 4307b4d3d1227d69007391d87e1a3936dfbf188bbf512a0d97fbfdb475e7bf74593d5c5578b4e3aee396caa654a50ae3c132043087c1da78c182dad91b322295 WHIRLPOOL a1ff00a6f21e6667db87581f5975775c51ec0ef703ee6715ee8cc0b3cdca8b1c08607abfda956e8da2daa7be4f794e8f693f23d6fd15981c5c50b98388b0418d EBUILD qemu-2.0.0-r1.ebuild 18252 SHA256 08b927a25c9f88d90195b28d69c6abc6a971accb449ed8082c9471224f88c10d SHA512 ea5f33db18c158e4f5e5f4e01834763f5d735c5dcf8e8b4fee22831dbde5ce134858cbaffa02d3e6baf30f574c52f3fc6d969d1253ea6a8334355e977e1e5651 WHIRLPOOL b0ecd2e63f70c3274d45c94351a58be3b4704e604ebec8f4acdb2fe01de532292de43b041bdb059ec8294fbc163756ba1814cd058cad73da1397b61cea2112e0 EBUILD qemu-2.1.0-r1.ebuild 18299 SHA256 82a97dbe29d4ff9475b3877531b884f95e7084e40f320811c9942cb32913f7a2 SHA512 62b47f7d19ff7591e3f8220da980952b7d519b0a420ac521c899eb1ac698b727b1c258000f9a179ddd4f5d7c78b3b3fde881eac252708621d094b947df8ef268 WHIRLPOOL b3068618f1aabfa2faaaea6d03afbcc330ffa44c611e226717a97ef9084324a500b39dce257db5f57a9c30048f14b203b43982a0876b2aa403e20b8a5225c5c3 EBUILD qemu-2.1.0.ebuild 18007 SHA256 026af0cea78e108dcebbecca5c72df8ff37d138d33df20057d57550a4a2f5fc3 SHA512 aea577f787d9e6a05ffdb6db0cd8cb77520997482368390d6fe341043ffb654e5a18946560863f8219768afa82e4ef5b6a38ce166f8514ff765f0eddbe68bd3b WHIRLPOOL 2d8047017b848ccb7f92480c1a3c777c7c510a7849258c6f8cd4da5762bfb1e4a61d16fa365b946aa97394bf790eb90eac41340fdbb4bd02698335a3f0e21817 +EBUILD qemu-2.1.1.ebuild 18295 SHA256 4128856e2b1df0e43c0307799c67bff1d41a2d5a3d21c7cc788359caf75c5cbb SHA512 e8b1f9245888580015ed252c5c56f0bb60a17f69ef1d3dcada6faa40674782ec6abb85a5421522d021744842e0713864ee1b968d3c5708565974964b3b261069 WHIRLPOOL 4d526b3dbe7ce29b63f095264ebb3a115e5d30c988755c87706f652b68b677a1e207b2069678ae354d934f8a61241bf1ea614f375971be4a18ca3e79c11f9935 EBUILD qemu-9999.ebuild 18241 SHA256 cc648443ce5574459b59328fcd8df8909e674ad817e101e9e7b992243bfba42b SHA512 cc5cbff55f11dd9b0f9135d6a229b3d1986a719ec704ad1bf40edf1e9f0f41dc5c539a6142735b4f8c835b070155d6ba01afec246d274c2f895924a35740f433 WHIRLPOOL bb1807a297695d6ddd0866c3e70a282dad7d50a912f51e85a1c96dfb0975c69f718f6897cfbc09c49f8ffcbe61277d2e0abfec128c7bc0280f4e877586a4516e -MISC ChangeLog 48303 SHA256 0c637d629c8ae127197338492eccc7337238623da5bb76a24ed46c16578bbb1d SHA512 992fff6bbd1e75701455b51a28571f85e17cad976ad1cfd4cde81f2306202e31c24cade8008a09a2e753a6d77c8c262340134f108b0681a6cc6be2bbe4d6f12f WHIRLPOOL 42297075d26b5d6caaa7dd42fc29b5be256edfd3db271fa444c4fcc528162144eb93981bf8f65d8a023b1c9db1cfc70c072045e99e752bedd68a27ad4c5f0285 +MISC ChangeLog 48458 SHA256 01324c6a51f6f0dd19f53c3f56fc9f907f3a751f0aec0750a534b7e0f6a28687 SHA512 add8449a46b8457f7b1f817f078552166fdfcb2e274c8af28749b3f6c3ef3741abbe69d26574673704bd4cda2144f9ddf5901b60803a5a63f492c3959c17bf75 WHIRLPOOL 90d15dd934abbaf68a3520d861f55bbcac8678dd8f9620d351f17c31123a76eadc69a8c7594885c05d09255d147d03dffd0b06093469838dc04b37a8fd39a278 MISC metadata.xml 3774 SHA256 45d220d5c3fedecb5c318e2ab1fa796391f5fd3db09e4ef218b3bc7cb3cb10e1 SHA512 90b16206b5398b4044132d930b417372e1d305a93b062c895bc3b46ae64a19aa96d2471b5838f960cca7c6c30ce58571f332731f02eaeee17e4204469c5d6330 WHIRLPOOL f5498b8cb14aeeacdfd1da30c26ceca282bba3042a6288496d624d91c3c26c1bed34c42374db04e06378c8efd78010d3bef76c41c1aa529ccf17cec513ed1fa8 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 -iQIcBAEBCAAGBQJUCt7RAAoJEPGu1DbS6WIAxYIP/A1RSLplku6mEHP2nZAHdw0L -K2cuQNsIm+wIiBTFU1UPGfUHbiOX/CytFK8e9bKoze6klNHoFiTChnqurkOgsGBE -/ZaURtohHezHzH8ylzplXHg7eWAKu2dPoHPeVl/zHk5nM5BLFJu+CGzasUapgotJ -MQJ1druWBNdkPfry35W5f0wleBvAGqF65dR4o8tYfSdtmXKEE/TXWX++DXFiX8Qa -7cbqTUmjGCR3a/DcOkSk2QVB//UXkP223cQzTm4B4MBX8VijzYfWQV6qczsHVPCf -mA5+R2umQ4NUVpbvineLbpiXFVH3fVDMoK43jUhlP5NtItIxWagPmsKE7smy11n6 -f9mWtxy81w9I50nj6WV/vdWvQuIcXjcQJQ1J8WmeL4bU+qUGXWQ9e6XxkzxfUZyf -VPzJJrQI099xv3teydopf2eZXi+OYVTkk6jC5AsuXnrxIEmGlYWv1Rt7yLUe/9tf -Bwisy15aAm17uu6E+tvwLEbpIPpU+JlYqJecBNl1ZuGJEIyyVcXVch907cPA24Wv -Karfca3fy7nhyMDZys/fxfmdHmlFdY/FNhhURx4oe+3PG5Ax6zkPqXVyaMXiPe5Z -Ru3llFWlFE4QHD8xwkWR+kyI3ohpPvPTy3mxtnGM8owr/+dnEv3EQQDwaCGJcb7F -SmhNBsX9/2vT7xnvBlWh -=7waz +iQIcBAEBCAAGBQJUEppfAAoJEPGu1DbS6WIAJKgP/RX4UmAoWbiwZcAPKxCDOrb6 +UICgD8KnmNF6t1UogP+brPWiwhoW/HvpQAMYEY70n0VjLh7bSJKmwLvObIWo/yit +/vXZvY1O339UUP064h5aVIdsRhVt8N/w24AUHLt0VrCrv6NDmU6P4pxFJTMNYkj1 +2c13fdlMyRNYmyBdVTQe+DothF3i04l0WdBbi9n6XsgHxICbn3iT60O+BR7srnLb +Oi6zvdOQqepq0C4noXuHJ1NuHha/6b3qqpywO5yFRYpDiLfLH1ELCZSDRwPEIGdA +zv7R15cwDb0NHQcUROPvAFBUwyPAWPhWdHbq3TaLXhXd2lGMQZjPRAoUBjazhFDq +69HljzmD/tDVK/QQ+ZD5QrHivEA4BbFmuBJ05Vco6cF3bqgePVn3Uj+tN0c4voHl +ijelJGQ3c13an/tTj028oIUcciBSJ+FFvsBMklqI1wi1MzWLgHQJ/USZW78BfLxd +xSRHK8ev99+dweUB6lxQwc0tfT0cPnYz0Nl1FILeATpRTW86FPHK1ZAv3sguwsO1 +9CrDoOAQprjT/hwJAwrEvpcCBEXFQxHrfLjsBoZ+3Zuj50xJs/23ykFlkX9RJyqd +1fgAr2ynXRmfVZGFM68YPUEKNkB6EUVXTrzNfjJMj1gQgZ4EnpSJq0xrM1izwrph +31odfwqyhoBa3dci1YxP +=uMfZ -----END PGP SIGNATURE----- diff --git a/app-emulation/qemu/files/qemu-2.1.1-readlink-self.patch b/app-emulation/qemu/files/qemu-2.1.1-readlink-self.patch new file mode 100644 index 000000000000..451a9682509f --- /dev/null +++ b/app-emulation/qemu/files/qemu-2.1.1-readlink-self.patch @@ -0,0 +1,81 @@ +fix already in upstream + +From f17f4989fa193fa8279474c5462289a3cfe69aea Mon Sep 17 00:00:00 2001 +From: Mike Frysinger <vapier@chromium.org> +Date: Fri, 8 Aug 2014 09:40:25 +0900 +Subject: [PATCH] linux-user: fix readlink handling with magic exe symlink + +The current code always returns the length of the path when it should +be returning the number of bytes it wrote to the output string. + +Further, readlink is not supposed to append a NUL byte, but the current +snprintf logic will always do just that. + +Even further, if you pass in a length of 0, you're suppoesd to get back +an error (EINVAL), but the current logic just returns 0. + +Further still, if there was an error reading the symlink, we should not +go ahead and try to read the target buffer as it is garbage. + +Simple test for the first two issues: +$ cat test.c +int main() { + char buf[50]; + size_t len; + for (len = 0; len < 10; ++len) { + memset(buf, '!', sizeof(buf)); + ssize_t ret = readlink("/proc/self/exe", buf, len); + buf[20] = '\0'; + printf("readlink(/proc/self/exe, {%s}, %zu) = %zi\n", buf, len, ret); + } + return 0; +} + +Now compare the output of the native: +$ gcc test.c -o /tmp/x +$ /tmp/x +$ strace /tmp/x + +With what qemu does: +$ armv7a-cros-linux-gnueabi-gcc test.c -o /tmp/x -static +$ qemu-arm /tmp/x +$ qemu-arm -strace /tmp/x + +Signed-off-by: Mike Frysinger <vapier@chromium.org> +Signed-off-by: Riku Voipio <riku.voipio@linaro.org> +--- + linux-user/syscall.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/linux-user/syscall.c b/linux-user/syscall.c +index fccf9f0..7c108ab 100644 +--- a/linux-user/syscall.c ++++ b/linux-user/syscall.c +@@ -6636,11 +6636,22 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, + p2 = lock_user(VERIFY_WRITE, arg2, arg3, 0); + if (!p || !p2) { + ret = -TARGET_EFAULT; ++ } else if (!arg3) { ++ /* Short circuit this for the magic exe check. */ ++ ret = -TARGET_EINVAL; + } else if (is_proc_myself((const char *)p, "exe")) { + char real[PATH_MAX], *temp; + temp = realpath(exec_path, real); +- ret = temp == NULL ? get_errno(-1) : strlen(real) ; +- snprintf((char *)p2, arg3, "%s", real); ++ /* Return value is # of bytes that we wrote to the buffer. */ ++ if (temp == NULL) { ++ ret = get_errno(-1); ++ } else { ++ /* Don't worry about sign mismatch as earlier mapping ++ * logic would have thrown a bad address error. */ ++ ret = MIN(strlen(real), arg3); ++ /* We cannot NUL terminate the string. */ ++ memcpy(p2, real, ret); ++ } + } else { + ret = get_errno(readlink(path(p), p2, arg3)); + } +-- +2.0.0 + diff --git a/app-emulation/qemu/qemu-2.1.1.ebuild b/app-emulation/qemu/qemu-2.1.1.ebuild new file mode 100644 index 000000000000..c93f66c97ba8 --- /dev/null +++ b/app-emulation/qemu/qemu-2.1.1.ebuild @@ -0,0 +1,595 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu/qemu-2.1.1.ebuild,v 1.1 2014/09/12 07:01:42 vapier Exp $ + +EAPI=5 + +PYTHON_COMPAT=( python{2_6,2_7} ) +PYTHON_REQ_USE="ncurses,readline" + +inherit eutils flag-o-matic linux-info toolchain-funcs multilib python-r1 \ + user udev fcaps readme.gentoo pax-utils + +BACKPORTS= + +if [[ ${PV} = *9999* ]]; then + EGIT_REPO_URI="git://git.qemu.org/qemu.git" + inherit git-2 + SRC_URI="" + KEYWORDS="" +else + SRC_URI="http://wiki.qemu-project.org/download/${P}.tar.bz2 + ${BACKPORTS:+ + http://dev.gentoo.org/~cardoe/distfiles/${P}-${BACKPORTS}.tar.xz}" + KEYWORDS="~amd64 ~ppc ~ppc64 ~x86 ~x86-fbsd" +fi + +DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools" +HOMEPAGE="http://www.qemu.org http://www.linux-kvm.org" + +LICENSE="GPL-2 LGPL-2 BSD-2" +SLOT="0" +IUSE="accessibility +aio alsa bluetooth +caps +curl debug +fdt glusterfs \ +gtk infiniband iscsi +jpeg \ +kernel_linux kernel_FreeBSD lzo ncurses nfs nls numa opengl +pin-upstream-blobs ++png pulseaudio python \ +rbd sasl +seccomp sdl selinux smartcard snappy spice ssh static static-softmmu \ +static-user systemtap tci test +threads tls usb usbredir +uuid vde +vhost-net \ +virtfs +vnc xattr xen xfs" + +COMMON_TARGETS="aarch64 alpha arm cris i386 m68k microblaze microblazeel mips +mips64 mips64el mipsel or32 ppc ppc64 s390x sh4 sh4eb sparc sparc64 unicore32 +x86_64" +IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS} lm32 moxie ppcemb xtensa xtensaeb" +IUSE_USER_TARGETS="${COMMON_TARGETS} armeb mipsn32 mipsn32el ppc64abi32 sparc32plus" + +use_targets=" + $(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS}) + $(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS}) +" +IUSE+=" ${use_targets}" + +# Require at least one softmmu or user target. +# Block USE flag configurations known to not work. +REQUIRED_USE="|| ( ${use_targets} ) + python? ( ${PYTHON_REQUIRED_USE} ) + qemu_softmmu_targets_arm? ( fdt ) + qemu_softmmu_targets_microblaze? ( fdt ) + qemu_softmmu_targets_ppc? ( fdt ) + qemu_softmmu_targets_ppc64? ( fdt ) + static? ( static-softmmu static-user ) + static-softmmu? ( !alsa !pulseaudio !bluetooth !opengl !gtk ) + virtfs? ( xattr )" + +# Yep, you need both libcap and libcap-ng since virtfs only uses libcap. +# +# The attr lib isn't always linked in (although the USE flag is always +# respected). This is because qemu supports using the C library's API +# when available rather than always using the extranl library. +COMMON_LIB_DEPEND=">=dev-libs/glib-2.0[static-libs(+)] + sys-libs/zlib[static-libs(+)] + xattr? ( sys-apps/attr[static-libs(+)] )" +SOFTMMU_LIB_DEPEND="${COMMON_LIB_DEPEND} + >=x11-libs/pixman-0.28.0[static-libs(+)] + aio? ( dev-libs/libaio[static-libs(+)] ) + caps? ( sys-libs/libcap-ng[static-libs(+)] ) + curl? ( >=net-misc/curl-7.15.4[static-libs(+)] ) + fdt? ( >=sys-apps/dtc-1.4.0[static-libs(+)] ) + glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] ) + infiniband? ( sys-infiniband/librdmacm[static-libs(+)] ) + jpeg? ( virtual/jpeg[static-libs(+)] ) + lzo? ( dev-libs/lzo:2[static-libs(+)] ) + ncurses? ( sys-libs/ncurses[static-libs(+)] ) + nfs? ( >=net-fs/libnfs-1.9.3[static-libs(+)] ) + numa? ( sys-process/numactl[static-libs(+)] ) + png? ( media-libs/libpng[static-libs(+)] ) + rbd? ( sys-cluster/ceph[static-libs(+)] ) + sasl? ( dev-libs/cyrus-sasl[static-libs(+)] ) + sdl? ( >=media-libs/libsdl-1.2.11[static-libs(+)] ) + seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] ) + snappy? ( app-arch/snappy[static-libs(+)] ) + spice? ( >=app-emulation/spice-0.12.0[static-libs(+)] ) + ssh? ( >=net-libs/libssh2-1.2.8[static-libs(+)] ) + tls? ( net-libs/gnutls[static-libs(+)] ) + usb? ( >=dev-libs/libusb-1.0.18[static-libs(+)] ) + uuid? ( >=sys-apps/util-linux-2.16.0[static-libs(+)] ) + vde? ( net-misc/vde[static-libs(+)] ) + xfs? ( sys-fs/xfsprogs[static-libs(+)] )" +USER_LIB_DEPEND="${COMMON_LIB_DEPEND}" +X86_FIRMWARE_DEPEND=" + >=sys-firmware/ipxe-1.0.0_p20130624 + pin-upstream-blobs? ( + ~sys-firmware/seabios-1.7.5 + ~sys-firmware/sgabios-0.1_pre8 + ~sys-firmware/vgabios-0.7a + ) + !pin-upstream-blobs? ( + sys-firmware/seabios + sys-firmware/sgabios + sys-firmware/vgabios + )" +RDEPEND="!static-softmmu? ( ${SOFTMMU_LIB_DEPEND//\[static-libs(+)]} ) + !static-user? ( ${USER_LIB_DEPEND//\[static-libs(+)]} ) + qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} ) + qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} ) + accessibility? ( app-accessibility/brltty ) + alsa? ( >=media-libs/alsa-lib-1.0.13 ) + bluetooth? ( net-wireless/bluez ) + gtk? ( + x11-libs/gtk+:3 + x11-libs/vte:2.90 + ) + iscsi? ( net-libs/libiscsi ) + opengl? ( virtual/opengl ) + pulseaudio? ( media-sound/pulseaudio ) + python? ( ${PYTHON_DEPS} ) + sdl? ( media-libs/libsdl[X] ) + selinux? ( sec-policy/selinux-qemu ) + smartcard? ( dev-libs/nss !app-emulation/libcacard ) + spice? ( >=app-emulation/spice-protocol-0.12.3 ) + systemtap? ( dev-util/systemtap ) + usbredir? ( >=sys-apps/usbredir-0.6 ) + virtfs? ( sys-libs/libcap ) + xen? ( app-emulation/xen-tools )" +DEPEND="${RDEPEND} + dev-lang/perl + =dev-lang/python-2* + sys-apps/texinfo + virtual/pkgconfig + kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 ) + gtk? ( nls? ( sys-devel/gettext ) ) + static-softmmu? ( ${SOFTMMU_LIB_DEPEND} ) + static-user? ( ${USER_LIB_DEPEND} ) + test? ( + dev-libs/glib[utils] + sys-devel/bc + )" + +STRIP_MASK="/usr/share/qemu/palcode-clipper" + +QA_PREBUILT=" + usr/share/qemu/openbios-ppc + usr/share/qemu/openbios-sparc64 + usr/share/qemu/openbios-sparc32 + usr/share/qemu/palcode-clipper + usr/share/qemu/s390-ccw.img + usr/share/qemu/u-boot.e500 +" + +QA_WX_LOAD="usr/bin/qemu-i386 + usr/bin/qemu-x86_64 + usr/bin/qemu-alpha + usr/bin/qemu-arm + usr/bin/qemu-cris + usr/bin/qemu-m68k + usr/bin/qemu-microblaze + usr/bin/qemu-microblazeel + usr/bin/qemu-mips + usr/bin/qemu-mipsel + usr/bin/qemu-or32 + usr/bin/qemu-ppc + usr/bin/qemu-ppc64 + usr/bin/qemu-ppc64abi32 + usr/bin/qemu-sh4 + usr/bin/qemu-sh4eb + usr/bin/qemu-sparc + usr/bin/qemu-sparc64 + usr/bin/qemu-armeb + usr/bin/qemu-sparc32plus + usr/bin/qemu-s390x + usr/bin/qemu-unicore32" + +DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure +you have the kernel module loaded before running kvm. The easiest way to +ensure that the kernel module is loaded is to load it on boot.\n +For AMD CPUs the module is called 'kvm-amd'\n +For Intel CPUs the module is called 'kvm-intel'\n +Please review /etc/conf.d/modules for how to load these\n\n +Make sure your user is in the 'kvm' group\n +Just run 'gpasswd -a <USER> kvm', then have <USER> re-login." + +qemu_support_kvm() { + if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 \ + use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64 \ + use qemu_softmmu_targets_s390x; then + return 0 + fi + + return 1 +} + +pkg_pretend() { + if use kernel_linux && kernel_is lt 2 6 25; then + eerror "This version of KVM requres a host kernel of 2.6.25 or higher." + elif use kernel_linux; then + if ! linux_config_exists; then + eerror "Unable to check your kernel for KVM support" + else + CONFIG_CHECK="~KVM ~TUN ~BRIDGE" + ERROR_KVM="You must enable KVM in your kernel to continue" + ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in" + ERROR_KVM_AMD+=" your kernel configuration." + ERROR_KVM_INTEL="If you have an Intel CPU, you must enable" + ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration." + ERROR_TUN="You will need the Universal TUN/TAP driver compiled" + ERROR_TUN+=" into your kernel or loaded as a module to use the" + ERROR_TUN+=" virtual network device if using -net tap." + ERROR_BRIDGE="You will also need support for 802.1d" + ERROR_BRIDGE+=" Ethernet Bridging for some network configurations." + use vhost-net && CONFIG_CHECK+=" ~VHOST_NET" + ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net" + ERROR_VHOST_NET+=" support" + + if use amd64 || use x86 || use amd64-linux || use x86-linux; then + CONFIG_CHECK+=" ~KVM_AMD ~KVM_INTEL" + fi + + use python && CONFIG_CHECK+=" ~DEBUG_FS" + ERROR_DEBUG_FS="debugFS support required for kvm_stat" + + # Now do the actual checks setup above + check_extra_config + fi + fi + + if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then + eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt" + eerror "instances are still pointing to it. Please update your" + eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag" + eerror "and the right system binary (e.g. qemu-system-x86_64)." + die "update your virt configs to not use qemu-kvm" + fi +} + +pkg_setup() { + enewgroup kvm 78 +} + +src_prepare() { + # Alter target makefiles to accept CFLAGS set via flag-o + sed -i -r \ + -e 's/^(C|OP_C|HELPER_C)FLAGS=/\1FLAGS+=/' \ + Makefile Makefile.target || die + + # Cheap hack to disable gettext .mo generation. + use nls || rm -f po/*.po + + epatch "${FILESDIR}"/qemu-1.7.0-cflags.patch + epatch "${FILESDIR}"/${PN}-2.1.1-readlink-self.patch + [[ -n ${BACKPORTS} ]] && \ + EPATCH_FORCE=yes EPATCH_SUFFIX="patch" EPATCH_SOURCE="${S}/patches" \ + epatch + + # Fix ld and objcopy being called directly + tc-export AR LD OBJCOPY + + # Verbose builds + MAKEOPTS+=" V=1" + + epatch_user +} + +## +# configures qemu based on the build directory and the build type +# we are using. +# +qemu_src_configure() { + debug-print-function ${FUNCNAME} "$@" + + local buildtype=$1 + local builddir=$2 + local static_flag="static-${buildtype}" + + # audio options + local audio_opts="oss" + use alsa && audio_opts="alsa,${audio_opts}" + use sdl && audio_opts="sdl,${audio_opts}" + use pulseaudio && audio_opts="pa,${audio_opts}" + + local conf_opts=( + --prefix=/usr + --sysconfdir=/etc + --libdir=/usr/$(get_libdir) + --docdir=/usr/share/doc/${PF}/html + --disable-bsd-user + --disable-guest-agent + --disable-strip + --disable-werror + --python="${PYTHON}" + --cc="$(tc-getCC)" + --cxx="$(tc-getCXX)" + --host-cc="$(tc-getBUILD_CC)" + $(use_enable debug debug-info) + $(use_enable debug debug-tcg) + --enable-docs + $(use_enable tci tcg-interpreter) + $(use_enable xattr attr) + ) + + # Disable options not used by user targets as the default configure + # options will autoprobe and try to link in a bunch of unused junk. + conf_softmmu() { + if [[ ${buildtype} == "user" ]] ; then + echo "--disable-${2:-$1}" + else + use_enable "$@" + fi + } + conf_opts+=( + $(conf_softmmu accessibility brlapi) + $(conf_softmmu aio linux-aio) + $(conf_softmmu bluetooth bluez) + $(conf_softmmu caps cap-ng) + $(conf_softmmu curl) + $(conf_softmmu fdt) + $(conf_softmmu glusterfs) + $(conf_softmmu gtk) + $(conf_softmmu infiniband rdma) + $(conf_softmmu iscsi libiscsi) + $(conf_softmmu jpeg vnc-jpeg) + $(conf_softmmu kernel_linux kvm) + $(conf_softmmu lzo) + $(conf_softmmu ncurses curses) + $(conf_softmmu nfs libnfs) + $(conf_softmmu numa) + $(conf_softmmu opengl glx) + $(conf_softmmu png vnc-png) + $(conf_softmmu rbd) + $(conf_softmmu sasl vnc-sasl) + $(conf_softmmu sdl) + $(conf_softmmu seccomp) + $(conf_softmmu smartcard smartcard-nss) + $(conf_softmmu snappy) + $(conf_softmmu spice) + $(conf_softmmu ssh libssh2) + $(conf_softmmu tls quorum) + $(conf_softmmu tls vnc-tls) + $(conf_softmmu tls vnc-ws) + $(conf_softmmu usb libusb) + $(conf_softmmu usbredir usb-redir) + $(conf_softmmu uuid) + $(conf_softmmu vde) + $(conf_softmmu vhost-net) + $(conf_softmmu virtfs) + $(conf_softmmu vnc) + $(conf_softmmu xen) + $(conf_softmmu xen xen-pci-passthrough) + $(conf_softmmu xfs xfsctl) + ) + + case ${buildtype} in + user) + conf_opts+=( + --enable-linux-user + --disable-system + --target-list="${user_targets}" + --disable-blobs + --disable-tools + ) + ;; + softmmu) + conf_opts+=( + --disable-linux-user + --enable-system + --target-list="${softmmu_targets}" + --with-system-pixman + --audio-drv-list="${audio_opts}" + ) + use gtk && conf_opts+=( --with-gtkabi=3.0 ) + ;; + esac + + # Add support for SystemTAP + use systemtap && conf_opts+=( --enable-trace-backend=dtrace ) + + # We always want to attempt to build with PIE support as it results + # in a more secure binary. But it doesn't work with static or if + # the current GCC doesn't have PIE support. + if use ${static_flag}; then + conf_opts+=( --static --disable-pie ) + else + gcc-specs-pie && conf_opts+=( --enable-pie ) + fi + + einfo "./configure ${conf_opts[*]}" + cd "${builddir}" + ../configure "${conf_opts[@]}" || die "configure failed" + + # FreeBSD's kernel does not support QEMU assigning/grabbing + # host USB devices yet + use kernel_FreeBSD && \ + sed -i -E -e "s|^(HOST_USB=)bsd|\1stub|" "${S}"/config-host.mak +} + +src_configure() { + local target + + python_export_best + + softmmu_targets= softmmu_bins=() + user_targets= user_bins=() + + for target in ${IUSE_SOFTMMU_TARGETS} ; do + if use "qemu_softmmu_targets_${target}"; then + softmmu_targets+=",${target}-softmmu" + softmmu_bins+=( "qemu-system-${target}" ) + fi + done + + for target in ${IUSE_USER_TARGETS} ; do + if use "qemu_user_targets_${target}"; then + user_targets+=",${target}-linux-user" + user_bins+=( "qemu-${target}" ) + fi + done + + [[ -n ${softmmu_targets} ]] && \ + einfo "Building the following softmmu targets: ${softmmu_targets}" + + [[ -n ${user_targets} ]] && \ + einfo "Building the following user targets: ${user_targets}" + + if [[ -n ${softmmu_targets} ]]; then + mkdir "${S}/softmmu-build" + qemu_src_configure "softmmu" "${S}/softmmu-build" + fi + + if [[ -n ${user_targets} ]]; then + mkdir "${S}/user-build" + qemu_src_configure "user" "${S}/user-build" + fi +} + +src_compile() { + if [[ -n ${user_targets} ]]; then + cd "${S}/user-build" + default + fi + + if [[ -n ${softmmu_targets} ]]; then + cd "${S}/softmmu-build" + default + fi +} + +src_test() { + if [[ -n ${softmmu_targets} ]]; then + cd "${S}/softmmu-build" + pax-mark m */qemu-system-* #515550 + emake -j1 check + emake -j1 check-report.html + fi +} + +qemu_python_install() { + python_domodule "${S}/scripts/qmp/qmp.py" + + python_doscript "${S}/scripts/kvm/kvm_stat" + python_doscript "${S}/scripts/kvm/vmxcap" + python_doscript "${S}/scripts/qmp/qmp-shell" + python_doscript "${S}/scripts/qmp/qemu-ga-client" +} + +src_install() { + if [[ -n ${user_targets} ]]; then + cd "${S}/user-build" + emake DESTDIR="${ED}" install + + # Install binfmt handler init script for user targets + newinitd "${FILESDIR}/qemu-binfmt.initd-r1" qemu-binfmt + fi + + if [[ -n ${softmmu_targets} ]]; then + cd "${S}/softmmu-build" + emake DESTDIR="${ED}" install + + # This might not exist if the test failed. #512010 + [[ -e check-report.html ]] && dohtml check-report.html + + if use kernel_linux; then + udev_dorules "${FILESDIR}"/65-kvm.rules + fi + + if use python; then + python_foreach_impl qemu_python_install + fi + fi + + # Disable mprotect on the qemu binaries as they use JITs to be fast #459348 + pushd "${ED}"/usr/bin >/dev/null + pax-mark m "${softmmu_bins[@]}" "${user_bins[@]}" + popd >/dev/null + + # Install config file example for qemu-bridge-helper + insinto "/etc/qemu" + doins "${FILESDIR}/bridge.conf" + + # Remove the docdir placed qmp-commands.txt + mv "${ED}/usr/share/doc/${PF}/html/qmp-commands.txt" "${S}/docs/qmp/" + + cd "${S}" + dodoc Changelog MAINTAINERS docs/specs/pci-ids.txt + newdoc pc-bios/README README.pc-bios + dodoc docs/qmp/*.txt + + # Remove SeaBIOS since we're using the SeaBIOS packaged one + rm "${ED}/usr/share/qemu/bios.bin" + if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then + dosym ../seabios/bios.bin /usr/share/qemu/bios.bin + fi + + # Remove vgabios since we're using the vgabios packaged one + if [[ -n ${softmmu_targets} ]]; then + rm "${ED}/usr/share/qemu/vgabios.bin" + rm "${ED}/usr/share/qemu/vgabios-cirrus.bin" + rm "${ED}/usr/share/qemu/vgabios-qxl.bin" + rm "${ED}/usr/share/qemu/vgabios-stdvga.bin" + rm "${ED}/usr/share/qemu/vgabios-vmware.bin" + if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then + dosym ../vgabios/vgabios.bin /usr/share/qemu/vgabios.bin + dosym ../vgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin + dosym ../vgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin + dosym ../vgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin + dosym ../vgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin + fi + + # Remove sgabios since we're using the sgabios packaged one + rm "${ED}/usr/share/qemu/sgabios.bin" + if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then + dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin + fi + + # Remove iPXE since we're using the iPXE packaged one + rm "${ED}"/usr/share/qemu/pxe-*.rom + if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then + dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom + dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom + dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom + dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom + dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom + dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom + fi + fi + + qemu_support_kvm && readme.gentoo_create_doc +} + +pkg_postinst() { + if qemu_support_kvm; then + readme.gentoo_print_elog + ewarn "Migration from qemu-kvm instances and loading qemu-kvm created" + ewarn "save states has been removed starting with the 1.6.2 release" + ewarn + ewarn "It is recommended that you migrate any VMs that may be running" + ewarn "on qemu-kvm to a host with a newer qemu and regenerate" + ewarn "any saved states with a newer qemu." + ewarn + ewarn "qemu-kvm was the primary qemu provider in Gentoo through 1.2.x" + + if use x86 || use amd64; then + ewarn + ewarn "The /usr/bin/kvm and /usr/bin/qemu-kvm wrappers are no longer" + ewarn "installed. In order to use kvm acceleration, pass the flag" + ewarn "-enable-kvm when running your system target." + fi + fi + + fcaps cap_net_admin /usr/libexec/qemu-bridge-helper + if use virtfs && [ -n "${softmmu_targets}" ]; then + local virtfs_caps="cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_setgid,cap_mknod,cap_setuid" + fcaps ${virtfs_caps} /usr/bin/virtfs-proxy-helper + fi +} + +pkg_info() { + echo "Using:" + echo " $(best_version app-emulation/spice-protocol)" + echo " $(best_version sys-firmware/ipxe)" + echo " $(best_version sys-firmware/seabios)" + if has_version sys-firmware/seabios[binary]; then + echo " USE=binary" + else + echo " USE=''" + fi + echo " $(best_version sys-firmware/vgabios)" +} |