virtualbox packages: Bump to versions 5.1.32 and 5.2.6
[gentoo.git] / app-emulation / virtualbox / virtualbox-5.1.32.ebuild
1 # Copyright 1999-2018 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 PYTHON_COMPAT=( python2_7 )
7 inherit eutils flag-o-matic java-pkg-opt-2 linux-info multilib pax-utils python-single-r1 toolchain-funcs udev xdg-utils
8
9 MY_PV="${PV/beta/BETA}"
10 MY_PV="${MY_PV/rc/RC}"
11 MY_P=VirtualBox-${MY_PV}
12
13 DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
14 HOMEPAGE="https://www.virtualbox.org/"
15 SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.tar.bz2
16         https://dev.gentoo.org/~polynomial-c/${PN}/patchsets/${PN}-5.1.32-patches-01.tar.xz"
17
18 LICENSE="GPL-2"
19 SLOT="0"
20 KEYWORDS="~amd64 ~x86"
21 IUSE="alsa debug doc headless java libressl lvm pam pax_kernel pulseaudio +opengl python +qt5 +sdk +udev vboxwebsrv vnc"
22
23 RDEPEND="!app-emulation/virtualbox-bin
24         ~app-emulation/virtualbox-modules-${PV}
25         dev-libs/libIDL
26         >=dev-libs/libxslt-1.1.19
27         net-misc/curl
28         dev-libs/libxml2
29         media-libs/libpng:0=
30         media-libs/libvpx:0=
31         sys-libs/zlib
32         !headless? (
33                 media-libs/libsdl:0[X,video]
34                 x11-libs/libX11
35                 x11-libs/libXcursor
36                 x11-libs/libXext
37                 x11-libs/libXmu
38                 x11-libs/libXt
39                 opengl? ( virtual/opengl media-libs/freeglut )
40                 qt5? (
41                         dev-qt/qtcore:5
42                         dev-qt/qtgui:5
43                         dev-qt/qtprintsupport:5
44                         dev-qt/qtwidgets:5
45                         dev-qt/qtx11extras:5
46                         opengl? ( dev-qt/qtopengl:5 )
47                         x11-libs/libXinerama
48                 )
49         )
50         java? ( >=virtual/jre-1.6:= )
51         libressl? ( dev-libs/libressl:= )
52         !libressl? ( dev-libs/openssl:0= )
53         lvm? ( sys-fs/lvm2 )
54         udev? ( >=virtual/udev-171 )
55         vnc? ( >=net-libs/libvncserver-0.9.9 )"
56 DEPEND="${RDEPEND}
57         >=dev-util/kbuild-0.1.9998_pre20131130-r1
58         >=dev-lang/yasm-0.6.2
59         sys-devel/bin86
60         sys-libs/libcap
61         sys-power/iasl
62         virtual/pkgconfig
63         alsa? ( >=media-libs/alsa-lib-1.0.13 )
64         doc? (
65                 app-text/docbook-sgml-dtd:4.4
66                 dev-texlive/texlive-basic
67                 dev-texlive/texlive-latex
68                 dev-texlive/texlive-latexrecommended
69                 dev-texlive/texlive-latexextra
70                 dev-texlive/texlive-fontsrecommended
71                 dev-texlive/texlive-fontsextra
72         )
73         !headless? ( x11-libs/libXinerama )
74         java? ( >=virtual/jre-1.6:= )
75         pam? ( sys-libs/pam )
76         pax_kernel? ( sys-apps/elfix )
77         pulseaudio? ( media-sound/pulseaudio )
78         qt5? ( dev-qt/linguist-tools:5 )
79         vboxwebsrv? ( net-libs/gsoap[-gnutls(-)] )
80         ${PYTHON_DEPS}"
81
82 QA_TEXTRELS_x86="usr/lib/virtualbox-ose/VBoxGuestPropSvc.so
83         usr/lib/virtualbox/VBoxSDL.so
84         usr/lib/virtualbox/VBoxSharedFolders.so
85         usr/lib/virtualbox/VBoxDD2.so
86         usr/lib/virtualbox/VBoxOGLrenderspu.so
87         usr/lib/virtualbox/VBoxPython.so
88         usr/lib/virtualbox/VBoxDD.so
89         usr/lib/virtualbox/VBoxDDU.so
90         usr/lib/virtualbox/VBoxREM64.so
91         usr/lib/virtualbox/VBoxSharedClipboard.so
92         usr/lib/virtualbox/VBoxHeadless.so
93         usr/lib/virtualbox/VBoxRT.so
94         usr/lib/virtualbox/VBoxREM.so
95         usr/lib/virtualbox/VBoxSettings.so
96         usr/lib/virtualbox/VBoxKeyboard.so
97         usr/lib/virtualbox/VBoxSharedCrOpenGL.so
98         usr/lib/virtualbox/VBoxVMM.so
99         usr/lib/virtualbox/VirtualBox.so
100         usr/lib/virtualbox/VBoxOGLhosterrorspu.so
101         usr/lib/virtualbox/components/VBoxC.so
102         usr/lib/virtualbox/components/VBoxSVCM.so
103         usr/lib/virtualbox/components/VBoxDDU.so
104         usr/lib/virtualbox/components/VBoxRT.so
105         usr/lib/virtualbox/components/VBoxREM.so
106         usr/lib/virtualbox/components/VBoxVMM.so
107         usr/lib/virtualbox/VBoxREM32.so
108         usr/lib/virtualbox/VBoxPython2_7.so
109         usr/lib/virtualbox/VBoxXPCOMC.so
110         usr/lib/virtualbox/VBoxOGLhostcrutil.so
111         usr/lib/virtualbox/VBoxNetDHCP.so
112         usr/lib/virtualbox/VBoxNetNAT.so"
113
114 S="${WORKDIR}/${MY_P}"
115
116 REQUIRED_USE="
117         java? ( sdk )
118         python? ( sdk )
119         vboxwebsrv? ( java )
120         ${PYTHON_REQUIRED_USE}
121 "
122
123 pkg_setup() {
124         if ! use headless && ! use qt5 ; then
125                 einfo "No USE=\"qt5\" selected, this build will not include any Qt frontend."
126         elif use headless && use qt5 ; then
127                 einfo "You selected USE=\"headless qt5\", defaulting to"
128                 einfo "USE=\"headless\", this build will not include any X11/Qt frontend."
129         fi
130
131         if ! use opengl ; then
132                 einfo "No USE=\"opengl\" selected, this build will lack"
133                 einfo "the OpenGL feature."
134         fi
135         if ! use python ; then
136                 einfo "You have disabled the \"python\" USE flag. This will only"
137                 einfo "disable the python bindings being installed."
138         fi
139         java-pkg-opt-2_pkg_setup
140         python-single-r1_pkg_setup
141
142         tc-ld-disable-gold #bug 488176
143         tc-export CC CXX LD AR RANLIB
144         export HOST_CC="$(tc-getBUILD_CC)"
145 }
146
147 src_prepare() {
148         # Remove shipped binaries (kBuild,yasm), see bug #232775
149         rm -r kBuild/bin tools || die
150
151         # Replace pointless GCC version check with something less stupid.
152         # This is needed for the qt5 version check.
153         sed -e 's@^check_gcc$@cc_maj="$(gcc -dumpversion | cut -d. -f1)" ; cc_min="$(gcc -dumpversion | cut -d. -f2)"@' -i configure || die
154
155         # Don't use "echo -n"
156         sed 's@ECHO_N="echo -n"@ECHO_N="printf"@' -i configure || die
157
158         # Disable things unused or split into separate ebuilds
159         sed -e "s@MY_LIBDIR@$(get_libdir)@" \
160                 "${FILESDIR}"/${PN}-5-localconfig > LocalConfig.kmk || die
161
162         # Respect LDFLAGS
163         sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
164                 -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
165
166         # Do not use hard-coded ld (related to bug #488176)
167         sed -e '/QUIET)ld /s@ld @$(LD) @' \
168                 -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
169
170         # Use PAM only when pam USE flag is enbaled (bug #376531)
171         if ! use pam ; then
172                 elog "Disabling PAM removes the possibility to use the VRDP features."
173                 sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
174                 sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
175                         src/VBox/HostServices/Makefile.kmk || die
176         fi
177
178         # add correct java path
179         if use java ; then
180                 sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
181                         -i "${S}"/Config.kmk || die
182                 java-pkg-opt-2_src_prepare
183         fi
184
185         # Only add nopie patch when we're on hardened
186         if  gcc-specs-pie ; then
187                 eapply "${FILESDIR}/050_virtualbox-5.1.24-nopie.patch"
188         fi
189
190         # Only add paxmark patch when we're on pax_kernel
191         if use pax_kernel ; then
192                 eapply "${FILESDIR}"/virtualbox-5.1.4-paxmark-bldprogs.patch
193         fi
194
195         eapply "${WORKDIR}/patches"
196
197         eapply_user
198 }
199
200 src_configure() {
201         local myconf=(
202                 --with-gcc="$(tc-getCC)"
203                 --with-g++="$(tc-getCXX)"
204                 --disable-dbus
205                 --disable-kmods
206         )
207         use alsa       || myconf+=( --disable-alsa )
208         use debug      && myconf+=( --build-debug )
209         use doc        || myconf+=( --disable-docs )
210         use java       || myconf+=( --disable-java )
211         use lvm        || myconf+=( --disable-devmapper )
212         use opengl     || myconf+=( --disable-opengl )
213         use pulseaudio || myconf+=( --disable-pulse )
214         use python     || myconf+=( --disable-python )
215         use vboxwebsrv && myconf+=( --enable-webservice )
216         use vnc        && myconf+=( --enable-vnc )
217         if ! use headless ; then
218                 use qt5 || myconf+=( --disable-qt )
219         else
220                 myconf+=( --build-headless --disable-opengl )
221         fi
222         if use amd64 && ! has_multilib_profile ; then
223                 myconf+=( --disable-vmmraw )
224         fi
225         # not an autoconf script
226         ./configure ${myconf[@]} || die "configure failed"
227 }
228
229 src_compile() {
230         source ./env.sh || die
231
232         # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
233         MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS}) #'
234         MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS}) #'
235         MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
236         MAKE="kmk" emake \
237                 VBOX_BUILD_PUBLISHER=_Gentoo \
238                 TOOL_GCC3_CC="$(tc-getCC)" TOOL_GCC3_CXX="$(tc-getCXX)" \
239                 TOOL_GCC3_AS="$(tc-getCC)" TOOL_GCC3_AR="$(tc-getAR)" \
240                 TOOL_GCC3_LD="$(tc-getCXX)" TOOL_GCC3_LD_SYSMOD="$(tc-getLD)" \
241                 TOOL_GCC3_CFLAGS="${CFLAGS}" TOOL_GCC3_CXXFLAGS="${CXXFLAGS}" \
242                 VBOX_GCC_OPT="${CXXFLAGS}" \
243                 TOOL_YASM_AS=yasm KBUILD_VERBOSE=2 \
244                 all
245 }
246
247 src_install() {
248         local binpath="release"
249         use debug && binpath="debug"
250         cd "${S}"/out/linux.${ARCH}/${binpath}/bin || die
251
252         local vbox_inst_path="/usr/$(get_libdir)/${PN}" each fwfile size ico icofile
253
254         vbox_inst() {
255                 local binary="${1}"
256                 local perms="${2:-0750}"
257                 local path="${3:-${vbox_inst_path}}"
258
259                 [[ -n "${binary}" ]] || die "vbox_inst: No binray given!"
260                 [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
261
262                 insinto ${path}
263                 doins ${binary}
264                 fowners root:vboxusers ${path}/${binary}
265                 fperms ${perms} ${path}/${binary}
266         }
267
268         # Create configuration files
269         insinto /etc/vbox
270         newins "${FILESDIR}/${PN}-4-config" vbox.cfg
271
272         # Set the correct libdir
273         sed \
274                 -e "s@MY_LIBDIR@$(get_libdir)@" \
275                 -i "${D}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
276
277         # Install the wrapper script
278         exeinto ${vbox_inst_path}
279         newexe "${FILESDIR}/${PN}-ose-5-wrapper" "VBox"
280         fowners root:vboxusers ${vbox_inst_path}/VBox
281         fperms 0750 ${vbox_inst_path}/VBox
282
283         # Install binaries and libraries
284         insinto ${vbox_inst_path}
285         doins -r components
286
287         # *.rc files for x86_64 are only available on multilib systems
288         local rcfiles="*.rc"
289         if use amd64 && ! has_multilib_profile ; then
290                 rcfiles=""
291         fi
292         for each in VBox{ExtPackHelperApp,Manage,SVC,Tunctl,XPCOMIPCD} *so *r0 ${rcfiles} ; do
293                 vbox_inst ${each}
294         done
295
296         # These binaries need to be suid root.
297         for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
298                 vbox_inst ${each} 4750
299         done
300
301         # Install EFI Firmware files (bug #320757)
302         pushd "${S}"/src/VBox/Devices/EFI/FirmwareBin &>/dev/null || die
303         for fwfile in VBoxEFI{32,64}.fd ; do
304                 vbox_inst ${fwfile} 0644
305         done
306         popd &>/dev/null || die
307
308         # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
309         # VBoxXPCOMIPCD (bug #524202)
310         for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
311                 pax-mark -m "${D}"${vbox_inst_path}/${each}
312         done
313
314         # Symlink binaries to the shipped wrapper
315         for each in vbox{headless,manage} VBox{Headless,Manage,VRDP} ; do
316                 dosym ${vbox_inst_path}/VBox /usr/bin/${each}
317         done
318         dosym ${vbox_inst_path}/VBoxTunctl /usr/bin/VBoxTunctl
319
320         if use pam ; then
321                 # VRDPAuth only works with this (bug #351949)
322                 dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
323         fi
324
325         # set an env-variable for 3rd party tools
326         echo -n "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
327         doenvd "${T}/90virtualbox"
328
329         if ! use headless ; then
330                 vbox_inst VBoxSDL 4750
331                 pax-mark -m "${D}"${vbox_inst_path}/VBoxSDL
332
333                 for each in vboxsdl VBoxSDL ; do
334                         dosym ${vbox_inst_path}/VBox /usr/bin/${each}
335                 done
336
337                 if use qt5 ; then
338                         vbox_inst VirtualBox 4750
339                         pax-mark -m "${D}"${vbox_inst_path}/VirtualBox
340
341                         if use opengl ; then
342                                 vbox_inst VBoxTestOGL
343                                 pax-mark -m "${D}"${vbox_inst_path}/VBoxTestOGL
344                         fi
345
346                         for each in virtualbox VirtualBox ; do
347                                 dosym ${vbox_inst_path}/VBox /usr/bin/${each}
348                         done
349
350                         insinto /usr/share/${PN}
351                         doins -r nls
352
353                         newmenu "${FILESDIR}"/${PN}-ose.desktop-2 ${PN}.desktop
354                 fi
355
356                 pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
357                 for size in 16 32 48 64 128 ; do
358                         newicon -s ${size} ${PN}-${size}px.png ${PN}.png
359                 done
360                 newicon ${PN}-48px.png ${PN}.png
361                 doicon -s scalable ${PN}.svg
362                 popd &>/dev/null || die
363                 pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
364                 for size in 16 24 32 48 64 72 96 128 256 512 ; do
365                         for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
366                                 icofile="${PN}-${ico}-${size}px.png"
367                                 if [[ -f "${icofile}" ]] ; then
368                                         newicon -s ${size} ${icofile} ${PN}-${ico}.png
369                                 fi
370                         done
371                 done
372                 popd &>/dev/null || die
373         fi
374
375         if use lvm ; then
376                 vbox_inst VBoxVolInfo 4750
377                 dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
378         fi
379
380         if use sdk ; then
381                 insinto ${vbox_inst_path}
382                 doins -r sdk
383
384                 if use java ; then
385                         java-pkg_regjar "${D}${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
386                         java-pkg_regso "${D}${vbox_inst_path}/libvboxjxpcom.so"
387                 fi
388         fi
389
390         if use udev ; then
391                 # New way of handling USB device nodes for VBox (bug #356215)
392                 local udevdir="$(get_udevdir)"
393                 insinto ${udevdir}
394                 doins VBoxCreateUSBNode.sh
395                 fowners root:vboxusers ${udevdir}/VBoxCreateUSBNode.sh
396                 fperms 0750 ${udevdir}/VBoxCreateUSBNode.sh
397                 insinto ${udevdir}/rules.d
398                 sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/10-virtualbox.rules \
399                         > "${T}"/10-virtualbox.rules || die
400                 doins "${T}"/10-virtualbox.rules
401         fi
402
403         if use vboxwebsrv ; then
404                 vbox_inst vboxwebsrv
405                 dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
406                 newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
407                 newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
408         fi
409
410         if use doc ; then
411                 dodoc UserManual.pdf
412         fi
413 }
414
415 pkg_postinst() {
416         xdg_desktop_database_update
417
418         if use udev ; then
419                 udevadm control --reload-rules \
420                         && udevadm trigger --subsystem-match=usb
421         fi
422
423         if ! use headless && use qt5 ; then
424                 elog "To launch VirtualBox just type: \"virtualbox\"."
425         fi
426         elog "You must be in the vboxusers group to use VirtualBox."
427         elog ""
428         elog "The latest user manual is available for download at:"
429         elog "http://download.virtualbox.org/virtualbox/${PV}/UserManual.pdf"
430         elog ""
431         elog "For advanced networking setups you should emerge:"
432         elog "net-misc/bridge-utils and sys-apps/usermode-utilities"
433         elog ""
434         elog "IMPORTANT!"
435         elog "If you upgrade from app-emulation/virtualbox-ose make sure to run"
436         elog "\"env-update\" as root and logout and relogin as the user you wish"
437         elog "to run ${PN} as."
438         elog ""
439         elog "Starting with version 4.0.0, ${PN} has USB-1 support."
440         elog "For USB-2 support, PXE-boot ability and VRDP support please emerge"
441         elog "  app-emulation/virtualbox-extpack-oracle"
442         elog "package."
443         elog "Starting with version 5.0.0, ${PN} no longer has the \"additions\" and"
444         elog "the \"extension\" USE flag. For installation of the guest additions ISO"
445         elog "image, please emerge"
446         elog "  app-emulation/virtualbox-additions"
447         elog "and for the USB2, USB3, VRDP and PXE boot ROM modules, please emerge"
448         elog "  app-emulation/virtualbox-extpack-oracle"
449         if ! use udev ; then
450                 elog ""
451                 elog "WARNING!"
452                 elog "Without USE=udev, USB devices will likely not work in ${PN}."
453         elif [ -e "${ROOT%/}/etc/udev/rules.d/10-virtualbox.rules" ] ; then
454                 elog ""
455                 elog "Please remove \"${ROOT%/}/etc/udev/rules.d/10-virtualbox.rules\""
456                 elog "or else USB in ${PN} won't work."
457         fi
458 }
459
460 pkg_postrm() {
461         xdg_desktop_database_update
462 }