Use https by default
[gentoo.git] / app-emulation / virtualbox / virtualbox-4.3.30.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}-4.3.16-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="+additions alsa doc extensions 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.7 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/jdk:1.7 virtual/jdk: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 PDEPEND="additions? ( ~app-emulation/virtualbox-additions-${PV} )
77         extensions? ( =app-emulation/virtualbox-extpack-oracle-${PV}* )"
78
79 QA_TEXTRELS_x86="usr/lib/virtualbox-ose/VBoxGuestPropSvc.so
80         usr/lib/virtualbox/VBoxSDL.so
81         usr/lib/virtualbox/VBoxSharedFolders.so
82         usr/lib/virtualbox/VBoxDD2.so
83         usr/lib/virtualbox/VBoxOGLrenderspu.so
84         usr/lib/virtualbox/VBoxPython.so
85         usr/lib/virtualbox/VBoxDD.so
86         usr/lib/virtualbox/VBoxDDU.so
87         usr/lib/virtualbox/VBoxREM64.so
88         usr/lib/virtualbox/VBoxSharedClipboard.so
89         usr/lib/virtualbox/VBoxHeadless.so
90         usr/lib/virtualbox/VBoxRT.so
91         usr/lib/virtualbox/VBoxREM.so
92         usr/lib/virtualbox/VBoxSettings.so
93         usr/lib/virtualbox/VBoxKeyboard.so
94         usr/lib/virtualbox/VBoxSharedCrOpenGL.so
95         usr/lib/virtualbox/VBoxVMM.so
96         usr/lib/virtualbox/VirtualBox.so
97         usr/lib/virtualbox/VBoxOGLhosterrorspu.so
98         usr/lib/virtualbox/components/VBoxC.so
99         usr/lib/virtualbox/components/VBoxSVCM.so
100         usr/lib/virtualbox/components/VBoxDDU.so
101         usr/lib/virtualbox/components/VBoxRT.so
102         usr/lib/virtualbox/components/VBoxREM.so
103         usr/lib/virtualbox/components/VBoxVMM.so
104         usr/lib/virtualbox/VBoxREM32.so
105         usr/lib/virtualbox/VBoxPython2_4.so
106         usr/lib/virtualbox/VBoxPython2_5.so
107         usr/lib/virtualbox/VBoxPython2_6.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 REQUIRED_USE="
115         java? ( sdk )
116         python? (
117                 ( sdk )
118         )
119         vboxwebsrv? ( java )
120         ${PYTHON_REQUIRED_USE}
121 "
122
123 pkg_setup() {
124         if ! use headless && ! use qt4 ; then
125                 einfo "No USE=\"qt4\" selected, this build will not include"
126                 einfo "any Qt frontend."
127         elif use headless && use qt4 ; then
128                 einfo "You selected USE=\"headless qt4\", defaulting to"
129                 einfo "USE=\"headless\", this build will not include any X11/Qt frontend."
130         fi
131
132         if ! use opengl ; then
133                 einfo "No USE=\"opengl\" selected, this build will lack"
134                 einfo "the OpenGL feature."
135         fi
136         if ! use python ; then
137                 einfo "You have disabled the \"python\" USE flag. This will only"
138                 einfo "disable the python bindings being installed."
139         fi
140         java-pkg-opt-2_pkg_setup
141         python-single-r1_pkg_setup
142 }
143
144 src_prepare() {
145         # Remove shipped binaries (kBuild,yasm), see bug #232775
146         rm -rf kBuild/bin tools
147
148         # Disable things unused or split into separate ebuilds
149         sed -e "s@MY_LIBDIR@$(get_libdir)@" \
150                 "${FILESDIR}"/${PN}-4-localconfig > LocalConfig.kmk || die
151
152         # Respect LDFLAGS
153         sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
154                 -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
155
156         # Use PAM only when pam USE flag is enbaled (bug #376531)
157         if ! use pam ; then
158                 elog "Disabling PAM removes the possibility to use the VRDP features."
159                 sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
160                 sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
161                         src/VBox/HostServices/Makefile.kmk || die
162         fi
163
164         # add correct java path
165         if use java ; then
166                 sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
167                         -i "${S}"/Config.kmk || die
168                 java-pkg-opt-2_src_prepare
169         fi
170
171         if ! gcc-specs-pie ; then
172                 EPATCH_EXCLUDE="050_${PN}-4.3.14-nopie.patch"
173         fi
174
175         EPATCH_SUFFIX="patch" \
176         EPATCH_FORCE="yes" \
177         epatch "${WORKDIR}/patches"
178
179         epatch_user
180 }
181
182 src_configure() {
183         local myconf
184         use alsa       || myconf+=" --disable-alsa"
185         use doc        || myconf+=" --disable-docs"
186         use java       || myconf+=" --disable-java"
187         use opengl     || myconf+=" --disable-opengl"
188         use pulseaudio || myconf+=" --disable-pulse"
189         use python     || myconf+=" --disable-python"
190         use vboxwebsrv && myconf+=" --enable-webservice"
191         use vnc        && myconf+=" --enable-vnc"
192         if ! use headless ; then
193                 use qt4 || myconf+=" --disable-qt4"
194         else
195                 myconf+=" --build-headless --disable-opengl"
196         fi
197         if use amd64 && ! has_multilib_profile ; then
198                 myconf+=" --disable-vmmraw"
199         fi
200         # not an autoconf script
201         ./configure \
202                 --with-gcc="$(tc-getCC)" \
203                 --with-g++="$(tc-getCXX)" \
204                 --disable-kmods \
205                 --disable-dbus \
206                 --disable-devmapper \
207                 ${myconf} \
208                 || die "configure failed"
209 }
210
211 src_compile() {
212         source ./env.sh
213
214         # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
215         # and strip all flags
216         # strip-flags
217
218         MAKEJOBS=$(echo ${MAKEOPTS} | egrep -o '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+')
219         MAKELOAD=$(echo ${MAKEOPTS} | egrep -o '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+')
220         MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
221         MAKE="kmk" emake \
222                 VBOX_BUILD_PUBLISHER=_Gentoo \
223                 TOOL_GCC3_CC="$(tc-getCC)" TOOL_GCC3_CXX="$(tc-getCXX)" \
224                 TOOL_GCC3_AS="$(tc-getCC)" TOOL_GCC3_AR="$(tc-getAR)" \
225                 TOOL_GCC3_LD="$(tc-getCXX)" TOOL_GCC3_LD_SYSMOD="$(tc-getLD)" \
226                 TOOL_GCC3_CFLAGS="${CFLAGS}" TOOL_GCC3_CXXFLAGS="${CXXFLAGS}" \
227                 VBOX_GCC_OPT="${CXXFLAGS}" \
228                 TOOL_YASM_AS=yasm KBUILD_VERBOSE=2 \
229                 all
230 }
231
232 src_install() {
233         cd "${S}"/out/linux.${ARCH}/release/bin || die
234
235         # Create configuration files
236         insinto /etc/vbox
237         newins "${FILESDIR}/${PN}-4-config" vbox.cfg
238
239         # Set the right libdir
240         sed -i \
241                 -e "s@MY_LIBDIR@$(get_libdir)@" \
242                 "${D}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
243
244         # Symlink binaries to the shipped wrapper
245         exeinto /usr/$(get_libdir)/${PN}
246         newexe "${FILESDIR}/${PN}-ose-3-wrapper" "VBox"
247         fowners root:vboxusers /usr/$(get_libdir)/${PN}/VBox
248         fperms 0750 /usr/$(get_libdir)/${PN}/VBox
249
250         dosym /usr/$(get_libdir)/${PN}/VBox /usr/bin/VBoxManage
251         dosym /usr/$(get_libdir)/${PN}/VBox /usr/bin/VBoxVRDP
252         dosym /usr/$(get_libdir)/${PN}/VBox /usr/bin/VBoxHeadless
253         dosym /usr/$(get_libdir)/${PN}/VBoxTunctl /usr/bin/VBoxTunctl
254
255         # Install binaries and libraries
256         insinto /usr/$(get_libdir)/${PN}
257         doins -r components
258
259         if use sdk ; then
260                 doins -r sdk
261         fi
262
263         if use vboxwebsrv ; then
264                 doins vboxwebsrv
265                 fowners root:vboxusers /usr/$(get_libdir)/${PN}/vboxwebsrv
266                 fperms 0750 /usr/$(get_libdir)/${PN}/vboxwebsrv
267                 dosym /usr/$(get_libdir)/${PN}/VBox /usr/bin/vboxwebsrv
268                 newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
269                 newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
270         fi
271
272         local gcfiles="*gc"
273         if use amd64 && ! has_multilib_profile ; then
274                 gcfiles=""
275         fi
276
277         for each in VBox{Manage,SVC,XPCOMIPCD,Tunctl,ExtPackHelperApp} *so *r0 ${gcfiles} ; do
278                 doins ${each}
279                 fowners root:vboxusers /usr/$(get_libdir)/${PN}/${each}
280                 fperms 0750 /usr/$(get_libdir)/${PN}/${each}
281         done
282
283         # VBoxNetAdpCtl and VBoxNetDHCP binaries need to be suid root in any case..
284         for each in VBoxNet{AdpCtl,DHCP,NAT} ; do
285                 doins ${each}
286                 fowners root:vboxusers /usr/$(get_libdir)/${PN}/${each}
287                 fperms 4750 /usr/$(get_libdir)/${PN}/${each}
288         done
289
290         # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
291         # VBoxXPCOMIPCD (bug #524202)
292         for each in VBox{Manage,SVC,XPCOMIPCD} ; do
293                 pax-mark -m "${D}"/usr/$(get_libdir)/${PN}/${each} || die
294         done
295
296         if ! use headless ; then
297                 for each in VBox{SDL,Headless} ; do
298                         doins ${each}
299                         fowners root:vboxusers /usr/$(get_libdir)/${PN}/${each}
300                         fperms 4750 /usr/$(get_libdir)/${PN}/${each}
301                         pax-mark -m "${D}"/usr/$(get_libdir)/${PN}/${each}
302                 done
303
304                 if use opengl && use qt4 ; then
305                         doins VBoxTestOGL
306                         fowners root:vboxusers /usr/$(get_libdir)/${PN}/VBoxTestOGL
307                         fperms 0750 /usr/$(get_libdir)/${PN}/VBoxTestOGL
308                         pax-mark -m "${D}"/usr/$(get_libdir)/${PN}/VBoxTestOGL
309                 fi
310
311                 dosym /usr/$(get_libdir)/${PN}/VBox /usr/bin/VBoxSDL
312
313                 if use qt4 ; then
314                         doins VirtualBox
315                         fowners root:vboxusers /usr/$(get_libdir)/${PN}/VirtualBox
316                         fperms 4750 /usr/$(get_libdir)/${PN}/VirtualBox
317                         pax-mark -m "${D}"/usr/$(get_libdir)/${PN}/VirtualBox \
318                                 || die
319
320                         dosym /usr/$(get_libdir)/${PN}/VBox /usr/bin/VirtualBox
321
322                         newmenu "${FILESDIR}"/${PN}-ose.desktop-2 ${PN}.desktop
323                 fi
324
325                 pushd "${S}"/src/VBox/Resources/OSE &>/dev/null || die
326                 for size in 16 32 48 64 128 ; do
327                         newicon -s ${size} ${PN}-${size}px.png ${PN}.png
328                 done
329                 newicon ${PN}-48px.png ${PN}.png
330                 popd &>/dev/null || die
331         else
332                 doins VBoxHeadless
333                 fowners root:vboxusers /usr/$(get_libdir)/${PN}/VBoxHeadless
334                 fperms 4750 /usr/$(get_libdir)/${PN}/VBoxHeadless
335                 pax-mark -m "${D}"/usr/$(get_libdir)/${PN}/VBoxHeadless || die
336         fi
337
338         insinto /usr/$(get_libdir)/${PN}
339         # Install EFI Firmware files (bug #320757)
340         pushd "${S}"/src/VBox/Devices/EFI/FirmwareBin &>/dev/null || die
341         for fwfile in VBoxEFI{32,64}.fd ; do
342                 doins ${fwfile}
343                 fowners root:vboxusers /usr/$(get_libdir)/${PN}/${fwfile}
344         done
345         popd &>/dev/null || die
346
347         if use udev ; then
348                 # New way of handling USB device nodes for VBox (bug #356215)
349                 local udevdir="$(get_udevdir)"
350                 insinto ${udevdir}
351                 doins VBoxCreateUSBNode.sh
352                 fowners root:vboxusers ${udevdir}/VBoxCreateUSBNode.sh
353                 fperms 0750 ${udevdir}/VBoxCreateUSBNode.sh
354                 insinto ${udevdir}/rules.d
355                 doins "${FILESDIR}"/10-virtualbox.rules
356                 sed "s@%UDEVDIR%@${udevdir}@" \
357                         -i "${D}"${udevdir}/rules.d/10-virtualbox.rules || die
358         fi
359
360         insinto /usr/share/${PN}
361         if ! use headless && use qt4 ; then
362                 doins -r nls
363         fi
364
365         # VRDPAuth only works with this (bug #351949)
366         dosym VBoxAuth.so  /usr/$(get_libdir)/${PN}/VRDPAuth.so
367
368         # set an env-variable for 3rd party tools
369         echo -n "VBOX_APP_HOME=/usr/$(get_libdir)/${PN}" > "${T}/90virtualbox"
370         doenvd "${T}/90virtualbox"
371
372         if use java ; then
373                 java-pkg_regjar "${D}/usr/$(get_libdir)/${PN}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
374                 java-pkg_regso "${D}/usr/$(get_libdir)/${PN}/libvboxjxpcom.so"
375         fi
376 }
377
378 pkg_postinst() {
379         fdo-mime_desktop_database_update
380
381         if use udev ; then
382                 udevadm control --reload-rules \
383                         && udevadm trigger --subsystem-match=usb
384         fi
385
386         if ! use headless && use qt4 ; then
387                 elog "To launch VirtualBox just type: \"VirtualBox\"."
388         fi
389         elog "You must be in the vboxusers group to use VirtualBox."
390         elog ""
391         elog "The latest user manual is available for download at:"
392         elog "http://download.virtualbox.org/virtualbox/${PV}/UserManual.pdf"
393         elog ""
394         elog "For advanced networking setups you should emerge:"
395         elog "net-misc/bridge-utils and sys-apps/usermode-utilities"
396         elog ""
397         elog "IMPORTANT!"
398         elog "If you upgrade from app-emulation/virtualbox-ose make sure to run"
399         elog "\"env-update\" as root and logout and relogin as the user you wish"
400         elog "to run ${PN} as."
401         elog ""
402         elog "Starting with version 4.0.0, ${PN} has USB-1 support."
403         elog "For USB-2 support, PXE-boot ability and VRDP support please emerge"
404         elog "  app-emulation/virtualbox-extpack-oracle"
405         elog "package."
406         if ! use udev ; then
407                 elog ""
408                 elog "WARNING!"
409                 elog "Without USE=udev, USB devices will likely not work in ${PN}."
410         elif [ -e "${ROOT}/etc/udev/rules.d/10-virtualbox.rules" ] ; then
411                 elog ""
412                 elog "Please remove \"${ROOT}/etc/udev/rules.d/10-virtualbox.rules\""
413                 elog "or else USB in ${PN} won't work."
414         fi
415 }
416
417 pkg_postrm() {
418         fdo-mime_desktop_database_update
419 }