123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- # Copyright 1999-2017 Gentoo Foundation
- # Distributed under the terms of the GNU General Public License v2
- EAPI=6
- inherit eutils linux-mod systemd user toolchain-funcs
- MY_PV="${PV/beta/BETA}"
- MY_PV="${MY_PV/rc/RC}"
- MY_P=VirtualBox-${MY_PV}
- DESCRIPTION="VirtualBox kernel modules and user-space tools for Gentoo guests"
- HOMEPAGE="http://www.virtualbox.org/"
- SRC_URI="http://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.tar.bz2"
- LICENSE="GPL-2"
- SLOT="0"
- KEYWORDS="amd64 x86"
- IUSE="X"
- RDEPEND="X? ( x11-apps/xrandr
- x11-apps/xrefresh
- x11-libs/libXmu
- x11-libs/libX11
- x11-libs/libXt
- x11-libs/libXext
- x11-libs/libXau
- x11-libs/libXdmcp
- x11-libs/libSM
- x11-libs/libICE
- x11-proto/glproto )
- sys-apps/dbus
- !!x11-drivers/xf86-input-virtualbox"
- DEPEND="${RDEPEND}
- >=dev-util/kbuild-0.1.9998_pre20131130
- >=dev-lang/yasm-0.6.2
- sys-devel/bin86
- sys-libs/pam
- sys-power/iasl
- X? ( x11-proto/renderproto )
- !X? ( x11-proto/xproto )"
- PDEPEND="X? ( ~x11-drivers/xf86-video-virtualbox-${PV} )"
- BUILD_TARGETS="all"
- BUILD_TARGET_ARCH="${ARCH}"
- S="${WORKDIR}/${MY_P}"
- pkg_setup() {
- MODULE_NAMES="vboxguest(misc:${WORKDIR}/vboxguest:${WORKDIR}/vboxguest)
- vboxsf(misc:${WORKDIR}/vboxsf:${WORKDIR}/vboxsf)"
- use X && MODULE_NAMES+=" vboxvideo(misc:${WORKDIR}/vboxvideo::${WORKDIR}/vboxvideo)"
- linux-mod_pkg_setup
- BUILD_PARAMS="KERN_DIR=${KV_OUT_DIR} KERNOUT=${KV_OUT_DIR}"
- enewgroup vboxguest
- enewuser vboxguest -1 /bin/sh /dev/null vboxguest
- # automount Error: VBoxServiceAutoMountWorker: Group "vboxsf" does not exist
- enewgroup vboxsf
- }
- src_unpack() {
- unpack ${A}
- # Create and unpack a tarball with the sources of the Linux guest
- # kernel modules, to include all the needed files
- "${S}"/src/VBox/Additions/linux/export_modules "${WORKDIR}/vbox-kmod.tar.gz"
- unpack ./vbox-kmod.tar.gz
- # Remove shipped binaries (kBuild,yasm), see bug #232775
- cd "${S}"
- rm -rf kBuild/bin tools
- }
- src_prepare() {
- # PaX fixes (see bug #298988)
- pushd "${WORKDIR}" &>/dev/null || die
- eapply "${FILESDIR}"/vboxguest-4.1.0-log-use-c99.patch
- popd &>/dev/null || die
- # Disable things unused or splitted into separate ebuilds
- cp "${FILESDIR}/${PN}-5-localconfig" LocalConfig.kmk || die
- use X || echo "VBOX_WITH_X11_ADDITIONS :=" >> LocalConfig.kmk
- # stupid new header references...
- for vboxheader in {product,revision,version}-generated.h ; do
- for mdir in vbox{guest,sf} ; do
- ln -sf "${S}"/out/linux.${ARCH}/release/${vboxheader} \
- "${WORKDIR}/${mdir}/${vboxheader}"
- done
- done
- # Remove pointless GCC version limitations in check_gcc()
- sed -e "/\s*-o\s*\\\(\s*\$cc_maj\s*-eq\s*[5-9]\s*-a\s*\$cc_min\s*-gt\s*[0-5]\s*\\\)\s*\\\/d" \
- -i configure || die
- eapply_user
- }
- src_configure() {
- # build the user-space tools, warnings are harmless
- local cmd=(
- ./configure
- --nofatal
- --disable-xpcom
- --disable-sdl-ttf
- --disable-pulse
- --disable-alsa
- --with-gcc="$(tc-getCC)"
- --with-g++="$(tc-getCXX)"
- --target-arch=${ARCH}
- --with-linux="${KV_OUT_DIR}"
- --build-headless
- )
- echo "${cmd[@]}"
- "${cmd[@]}" || die "configure failed"
- source ./env.sh
- export VBOX_GCC_OPT="${CFLAGS} ${CPPFLAGS}"
- }
- src_compile() {
- MAKE="kmk" \
- emake TOOL_YASM_AS=yasm \
- VBOX_ONLY_ADDITIONS=1 \
- KBUILD_VERBOSE=2
- # Now creating the kernel modules. We must do this _after_
- # we compiled the user-space tools as we need two of the
- # automatically generated header files. (>=3.2.0)
- linux-mod_src_compile
- }
- src_install() {
- linux-mod_src_install
- cd "${S}"/out/linux.${ARCH}/release/bin/additions || die
- insinto /sbin
- newins mount.vboxsf mount.vboxsf
- fperms 4755 /sbin/mount.vboxsf
- newinitd "${FILESDIR}"/${PN}-8.initd ${PN}
- insinto /usr/sbin/
- newins VBoxService vboxguest-service
- fperms 0755 /usr/sbin/vboxguest-service
- insinto /usr/bin
- doins VBoxControl
- fperms 0755 /usr/bin/VBoxControl
- # VBoxClient user service and xrandr wrapper
- if use X ; then
- doins VBoxClient
- fperms 0755 /usr/bin/VBoxClient
- pushd "${S}"/src/VBox/Additions/x11/Installer &>/dev/null \
- || die
- newins 98vboxadd-xclient VBoxClient-all
- fperms 0755 /usr/bin/VBoxClient-all
- popd &>/dev/null || die
- fi
- # udev rule for vboxdrv
- local udev_rules_dir="/lib/udev/rules.d"
- dodir ${udev_rules_dir}
- echo 'KERNEL=="vboxguest", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
- >> "${D}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
- || die
- echo 'KERNEL=="vboxuser", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
- >> "${D}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
- || die
- # VBoxClient autostart file
- insinto /etc/xdg/autostart
- doins "${FILESDIR}"/vboxclient.desktop
- # sample xorg.conf
- insinto /usr/share/doc/${PF}
- doins "${FILESDIR}"/xorg.conf.vbox
- systemd_dounit "${FILESDIR}/${PN}.service"
- }
- pkg_postinst() {
- linux-mod_pkg_postinst
- if ! use X ; then
- elog "use flag X is off, enable it to install the"
- elog "X Window System video driver."
- fi
- elog ""
- elog "Please add users to the \"vboxguest\" group so they can"
- elog "benefit from seamless mode, auto-resize and clipboard."
- elog ""
- elog "The vboxsf group has been added to make automount services work."
- elog "These services are part of the shared folders support."
- elog ""
- elog "Please add:"
- elog "/etc/init.d/${PN}"
- elog "to the default runlevel in order to start"
- elog "needed services."
- elog "To use the VirtualBox X driver, use the following"
- elog "file as your /etc/X11/xorg.conf:"
- elog " /usr/share/doc/${PF}/xorg.conf.vbox"
- elog ""
- elog "Also make sure you use the Mesa library for OpenGL:"
- elog " eselect opengl set xorg-x11"
- elog ""
- elog "An autostart .desktop file has been installed to start"
- elog "VBoxClient in desktop sessions."
- elog ""
- elog "You can mount shared folders with:"
- elog " mount -t vboxsf <shared_folder_name> <mount_point>"
- elog ""
- elog "Warning:"
- elog "this ebuild is only needed if you are running gentoo"
- elog "inside a VirtualBox Virtual Machine, you don't need"
- elog "it to run VirtualBox itself."
- elog ""
- }
|