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