app-emulation/virtualbox-bin: amd64 stable wrt bug #714064
[gentoo.git] / app-emulation / virtualbox-bin / virtualbox-bin-6.1.4.136177-r1.ebuild
1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
3
4 EAPI=6
5
6 PYTHON_COMPAT=( python2_7 )
7
8 inherit xdg-utils gnome2 pax-utils python-r1 udev unpacker eapi7-ver
9
10 MAIN_PV="$(ver_cut 1-3)"
11 if [[ ${PV} = *_beta* ]] || [[ ${PV} = *_rc* ]] ; then
12         MY_PV="${MAIN_PV}_$(ver_cut 5-6)"
13         MY_PV="${MY_PV/beta/BETA}"
14         MY_PV="${MY_PV/rc/RC}"
15 else
16         MY_PV="${MAIN_PV}"
17         KEYWORDS="~amd64" #~x86
18 fi
19 VBOX_BUILD_ID="$(ver_cut 4)"
20 VBOX_PV="${MY_PV}-${VBOX_BUILD_ID}"
21 MY_P="VirtualBox-${VBOX_PV}-Linux"
22 # needed as sometimes the extpack gets another build ID
23 EXTP_PV="${VBOX_PV}"
24 EXTP_PN="Oracle_VM_VirtualBox_Extension_Pack"
25 EXTP_P="${EXTP_PN}-${EXTP_PV}"
26 # needed as sometimes the SDK gets another build ID
27 SDK_PV="${VBOX_PV}"
28 SDK_P="VirtualBoxSDK-${SDK_PV}"
29
30 DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
31 HOMEPAGE="https://www.virtualbox.org/"
32 SRC_URI="amd64? ( https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}_amd64.run )
33         https://download.virtualbox.org/virtualbox/${MY_PV}/${EXTP_P}.vbox-extpack -> ${EXTP_P}.tar.gz"
34         #x86? ( https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}_x86.run )
35
36 LICENSE="GPL-2 PUEL"
37 SLOT="0"
38 IUSE="+additions +chm headless python vboxwebsrv rdesktop-vrdp"
39 RESTRICT="bindist mirror"
40
41 if [[ "${PV}" != *beta* ]] ; then
42         SRC_URI+="
43                 sdk? ( https://download.virtualbox.org/virtualbox/${MY_PV}/${SDK_P}.zip )"
44         IUSE+=" sdk"
45 fi
46
47 DEPEND="app-arch/unzip
48         ${PYTHON_DEPS}"
49
50 RDEPEND="!!app-emulation/virtualbox
51         !app-emulation/virtualbox-additions
52         acct-group/vboxusers
53         ~app-emulation/virtualbox-modules-${MY_PV,,}
54         !headless? (
55                 dev-libs/glib
56                 media-libs/fontconfig
57                 media-libs/freetype
58                 media-libs/libpng
59                 media-libs/libsdl[X]
60                 x11-libs/libXcursor
61                 x11-libs/libXext
62                 x11-libs/libXfixes
63                 x11-libs/libXft
64                 x11-libs/libXi
65                 x11-libs/libXinerama
66                 x11-libs/libXrandr
67                 x11-libs/libXrender
68                 chm? ( dev-libs/expat )
69         )
70         dev-libs/libxml2
71         sys-fs/lvm2
72         x11-libs/libXau
73         x11-libs/libX11
74         x11-libs/libXt
75         x11-libs/libXmu
76         x11-libs/libSM
77         x11-libs/libICE
78         x11-libs/libXdmcp
79         ${PYTHON_DEPS}"
80
81 REQUIRED_USE="${PYTHON_REQUIRED_USE}"
82 S="${WORKDIR}"
83
84 QA_PREBUILT="opt/VirtualBox/*"
85
86 PYTHON_UPDATER_IGNORE="1"
87
88 src_unpack() {
89         unpack_makeself ${MY_P}_${ARCH}.run
90         unpack ./VirtualBox.tar.bz2
91
92         mkdir "${S}"/${EXTP_PN} || die
93         pushd "${S}"/${EXTP_PN} &>/dev/null || die
94         unpack ${EXTP_P}.tar.gz
95         popd &>/dev/null || die
96
97         if [[ "${PV}" != *beta* ]] && use sdk ; then
98                 unpack VirtualBoxSDK-${SDK_PV}.zip
99         fi
100 }
101
102 src_configure() {
103         :;
104 }
105
106 src_compile() {
107         :;
108 }
109
110 src_install() {
111         # create virtualbox configurations files
112         insinto /etc/vbox
113         newins "${FILESDIR}/${PN}-config" vbox.cfg
114
115         if ! use headless ; then
116                 newmenu "${FILESDIR}"/${PN}.desktop-2 ${PN}.desktop
117
118                 # set up symlinks (bug #572012)
119                 dosym ../../../../opt/VirtualBox/virtualbox.xml /usr/share/mime/packages/virtualbox.xml
120
121                 local size ico icofile
122                 for size in 16 24 32 48 64 72 96 128 256 ; do
123                         pushd "${S}"/icons/${size}x${size} &>/dev/null || die
124                         if [[ -f "virtualbox.png" ]] ; then
125                                 doicon -s ${size} virtualbox.png
126                         fi
127                         for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
128                                 icofile="virtualbox-${ico}.png"
129                                 if [[ -f "${icofile}" ]] ; then
130                                         doicon -s ${size} ${icofile}
131                                 fi
132                         done
133                         popd &>/dev/null || die
134                 done
135                 doicon -s scalable "${S}"/icons/scalable/virtualbox.svg
136                 insinto /usr/share/pixmaps
137                 newins "${S}"/icons/48x48/virtualbox.png ${PN}.png
138         fi
139
140         pushd "${S}"/${EXTP_PN} &>/dev/null || die
141         insinto /opt/VirtualBox/ExtensionPacks/${EXTP_PN}
142         doins -r linux.${ARCH}
143         doins ExtPack* PXE-Intel.rom
144         popd &>/dev/null || die
145         rm -rf "${S}"/${EXTP_PN}
146
147         insinto /opt/VirtualBox
148         dodir /opt/bin
149
150         doins UserManual.pdf
151
152         if [[ "${PV}" != *beta* ]] && use sdk ; then
153                 doins -r sdk
154         fi
155
156         if use additions; then
157                 doins -r additions
158         fi
159
160         if use vboxwebsrv; then
161                 doins vboxwebsrv
162                 fowners root:vboxusers /opt/VirtualBox/vboxwebsrv
163                 fperms 0750 /opt/VirtualBox/vboxwebsrv
164                 dosym ../../opt/VirtualBox/VBox.sh /opt/bin/vboxwebsrv
165                 newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
166                 newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
167         fi
168
169         if use rdesktop-vrdp; then
170                 doins rdesktop-vrdp
171                 doins -r rdesktop-vrdp-keymaps
172                 fperms 0750 /opt/VirtualBox/rdesktop-vrdp
173                 dosym ../../opt/VirtualBox/rdesktop-vrdp /opt/bin/rdesktop-vrdp
174         fi
175
176         if ! use headless && use chm; then
177                 doins kchmviewer VirtualBox.chm
178                 fowners root:vboxusers /opt/VirtualBox/kchmviewer
179                 fperms 0750 /opt/VirtualBox/kchmviewer
180         fi
181
182         # This ebuild / package supports only py2.7.  When py3 comes is unknown.
183         # The compile phase makes VBoxPython2_7.so.
184         # py3 support would presumably require a binary pre-compiled by py3.
185         use python && doins VBoxPython.so
186
187         rm -rf src rdesktop* deffiles install* routines.sh runlevel.sh \
188                 vboxdrv.sh VBox.sh VBox.png vboxnet.sh additions VirtualBox.desktop \
189                 VirtualBox.tar.bz2 LICENSE VBoxSysInfo.sh rdesktop* vboxwebsrv \
190                 webtest kchmviewer VirtualBox.chm vbox-create-usb-node.sh \
191                 90-vbox-usb.fdi uninstall.sh vboxshell.py vboxdrv-pardus.py \
192                 VBoxPython?_*.so
193
194         if use headless ; then
195                 rm -rf VBoxSDL VirtualBox{,VM} VBoxKeyboard.so
196         fi
197
198         doins -r *
199
200         # create symlinks for working around unsupported $ORIGIN/.. in VBoxC.so (setuid)
201         dosym ../VBoxVMM.so /opt/VirtualBox/components/VBoxVMM.so
202         dosym ../VBoxREM.so /opt/VirtualBox/components/VBoxREM.so
203         dosym ../VBoxRT.so /opt/VirtualBox/components/VBoxRT.so
204         dosym ../VBoxDDU.so /opt/VirtualBox/components/VBoxDDU.so
205         dosym ../VBoxXPCOM.so /opt/VirtualBox/components/VBoxXPCOM.so
206
207         local each
208         for each in VBox{Manage,SVC,XPCOMIPCD,Tunctl,TestOGL,ExtPackHelperApp} $(usex headless '' VirtualBox) ; do
209                 fowners root:vboxusers /opt/VirtualBox/${each}
210                 fperms 0750 /opt/VirtualBox/${each}
211                 pax-mark -m "${ED%/}"/opt/VirtualBox/${each}
212         done
213         # VBoxNetAdpCtl and VBoxNetDHCP binaries need to be suid root in any case..
214         for each in VBoxNet{AdpCtl,DHCP,NAT} $(usex headless '' VirtualBoxVM) ; do
215                 fowners root:vboxusers /opt/VirtualBox/${each}
216                 fperms 4750 /opt/VirtualBox/${each}
217                 pax-mark -m "${ED%/}"/opt/VirtualBox/${each}
218         done
219
220         if ! use headless ; then
221                 # Hardened build: Mark selected binaries set-user-ID-on-execution
222                 for each in VBox{SDL,Headless} ; do
223                         fowners root:vboxusers /opt/VirtualBox/${each}
224                         fperms 4510 /opt/VirtualBox/${each}
225                         pax-mark -m "${ED%/}"/opt/VirtualBox/${each}
226                 done
227
228                 dosym ../VirtualBox/VBox.sh /opt/bin/VirtualBox
229                 dosym ../VirtualBox/VBox.sh /opt/bin/VBoxSDL
230         else
231                 # Hardened build: Mark selected binaries set-user-ID-on-execution
232                 fowners root:vboxusers /opt/VirtualBox/VBoxHeadless
233                 fperms 4510 /opt/VirtualBox/VBoxHeadless
234                 pax-mark -m "${ED%/}"/opt/VirtualBox/VBoxHeadless
235         fi
236
237         exeinto /opt/VirtualBox
238         newexe "${FILESDIR}/${PN}-3-wrapper" "VBox.sh"
239         fowners root:vboxusers /opt/VirtualBox/VBox.sh
240         fperms 0750 /opt/VirtualBox/VBox.sh
241
242         dosym ../VirtualBox/VBox.sh /opt/bin/VBoxManage
243         dosym ../VirtualBox/VBox.sh /opt/bin/VBoxVRDP
244         dosym ../VirtualBox/VBox.sh /opt/bin/VBoxHeadless
245         dosym ../VirtualBox/VBoxTunctl /opt/bin/VBoxTunctl
246
247         # set an env-variable for 3rd party tools
248         echo -n "VBOX_APP_HOME=/opt/VirtualBox" > "${T}/90virtualbox"
249         doenvd "${T}/90virtualbox"
250
251         local udevdir="$(get_udevdir)"
252         insinto ${udevdir}/rules.d
253         doins "${FILESDIR}"/10-virtualbox.rules
254         sed "s@%UDEVDIR%@${udevdir}@" \
255                 -i "${ED%/}"${udevdir}/rules.d/10-virtualbox.rules || die
256         # move udev scripts into ${udevdir} (bug #372491)
257         mv "${ED%/}"/opt/VirtualBox/VBoxCreateUSBNode.sh "${ED%/}"${udevdir} || die
258         fperms 0750 ${udevdir}/VBoxCreateUSBNode.sh
259 }
260
261 pkg_postinst() {
262         xdg_icon_cache_update
263         xdg_desktop_database_update
264         xdg_mimeinfo_database_update
265
266         udevadm control --reload-rules && udevadm trigger --subsystem-match=usb
267
268         elog ""
269         if ! use headless ; then
270                 elog "To launch VirtualBox just type: \"VirtualBox\""
271                 elog ""
272         fi
273         elog "You must be in the vboxusers group to use VirtualBox."
274         elog ""
275         elog "For advanced networking setups you should emerge:"
276         elog "net-misc/bridge-utils and sys-apps/usermode-utilities"
277         elog ""
278         elog "Please visit http://www.virtualbox.org/wiki/Editions for"
279         elog "an overview about the different features of ${PN}"
280         elog "and virtualbox-ose"
281         if [ -e "${ROOT}/etc/udev/rules.d/10-virtualbox.rules" ] ; then
282                 elog ""
283                 elog "Please remove \"${ROOT}/etc/udev/rules.d/10-virtualbox.rules\""
284                 elog "or else USB in ${PN} won't work."
285         fi
286 }
287
288 pkg_postrm() {
289         xdg_icon_cache_update
290         xdg_desktop_database_update
291         xdg_mimeinfo_database_update
292 }