linamh/x11-base/x11-drm/x11-drm-99999999.ebuild

302 lines
6.7 KiB
Bash
Raw Normal View History

# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/x11-base/x11-drm/x11-drm-20070314.ebuild,v 1.2 2007/03/14 18:18:53 battousai Exp $
#EGIT_BRANCH="vblank-rework"
EGIT_REPO_URI="git://anongit.freedesktop.org/git/mesa/drm"
inherit eutils x11 linux-mod git
IUSE_VIDEO_CARDS="
video_cards_mach64
video_cards_mga
video_cards_nv
video_cards_r128
video_cards_radeon
video_cards_savage
video_cards_sis
video_cards_sunffb
video_cards_tdfx
video_cards_via"
IUSE="${IUSE_VIDEO_CARDS} kernel_FreeBSD kernel_linux"
# Make sure Portage does _NOT_ strip symbols. We will do it later and make sure
# that only we only strip stuff that are safe to strip ...
RESTRICT="strip"
S="${WORKDIR}/drm"
#PATCHVER="0.1"
PATCHDIR="${WORKDIR}/patch"
EXCLUDED="${WORKDIR}/excluded"
DESCRIPTION="DRM Kernel Modules for X11"
HOMEPAGE="http://dri.sf.net"
if [ -n "${PATCHVER}" ] ; then
SRC_URI="http://dev.gentoo.org/~dberkholz/distfiles/${P}-gentoo-${PATCHVER}.tar.bz2"
else
SRC_URI=""
fi
SLOT="0"
LICENSE="X11"
KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~x86 ~x86-fbsd"
DEPEND="kernel_linux? ( virtual/linux-sources )
kernel_FreeBSD? ( sys-freebsd/freebsd-sources
sys-freebsd/freebsd-mk-defs )"
RDEPEND=""
pkg_setup() {
# Setup the kernel's stuff.
kernel_setup
# Set video cards to build for.
set_vidcards
# Determine which -core dir we build in.
get_drm_build_dir
return 0
}
src_unpack() {
git_src_unpack
cd "${WORKDIR}"
# Apply patches if there's a patchball version number provided.
if [ -n "${PATCHVER}" ]
then
unpack ${P}-gentoo-${PATCHVER}.tar.bz2
cd "${S}"
patch_prepare
# Apply patches
EPATCH_SUFFIX="patch" epatch ${PATCHDIR}
fi
src_unpack_os
}
src_compile() {
einfo "Building DRM in ${SRC_BUILD}..."
src_compile_os
einfo "DRM build finished".
}
src_install() {
einfo "Installing DRM..."
cd "${SRC_BUILD}"
src_install_os
dodoc "${S}/linux-core/README.drm"
}
pkg_postinst() {
if use video_cards_sis
then
einfo "SiS direct rendering only works on 300 series chipsets."
einfo "SiS framebuffer also needs to be enabled in the kernel."
fi
if use video_cards_mach64
then
einfo "The Mach64 DRI driver is insecure."
einfo "Malicious clients can write to system memory."
einfo "For more information, see:"
einfo "http://dri.freedesktop.org/wiki/ATIMach64."
fi
pkg_postinst_os
}
# Functions used above are defined below:
kernel_setup() {
if use kernel_FreeBSD
then
K_RV=${CHOST/*-freebsd/}
elif use kernel_linux
then
linux-mod_pkg_setup
if kernel_is 2 4
then
eerror "Upstream support for 2.4 kernels has been removed, so this package will no"
eerror "longer support them."
die "Please use in-kernel DRM or switch to a 2.6 kernel."
fi
linux_chkconfig_builtin "DRM" && \
die "Please disable or modularize DRM in the kernel config. (CONFIG_DRM = n or m)"
CONFIG_CHECK="AGP"
ERROR_AGP="AGP support is not enabled in your kernel config (CONFIG_AGP)"
fi
}
set_vidcards() {
VIDCARDS=""
if [[ -n "${VIDEO_CARDS}" ]]; then
use video_cards_mach64 && \
VIDCARDS="${VIDCARDS} mach64.${KV_OBJ}"
use video_cards_mga && \
VIDCARDS="${VIDCARDS} mga.${KV_OBJ}"
use video_cards_nv && \
VIDCARDS="${VIDCARDS} nv.${KV_OBJ} nouveau.${KV_OBJ}"
use video_cards_r128 && \
VIDCARDS="${VIDCARDS} r128.${KV_OBJ}"
use video_cards_radeon && \
VIDCARDS="${VIDCARDS} radeon.${KV_OBJ}"
use video_cards_savage && \
VIDCARDS="${VIDCARDS} savage.${KV_OBJ}"
use video_cards_sis && \
VIDCARDS="${VIDCARDS} sis.${KV_OBJ}"
use video_cards_via && \
VIDCARDS="${VIDCARDS} via.${KV_OBJ}"
use video_cards_sunffb && \
VIDCARDS="${VIDCARDS} ffb.${KV_OBJ}"
use video_cards_tdfx && \
VIDCARDS="${VIDCARDS} tdfx.${KV_OBJ}"
fi
}
get_drm_build_dir() {
if use kernel_FreeBSD
then
SRC_BUILD="${S}/bsd-core"
elif kernel_is 2 6
then
SRC_BUILD="${S}/linux-core"
fi
}
patch_prepare() {
# Handle exclusions based on the following...
# All trees (0**), Standard only (1**), Others (none right now)
# 2.4 vs. 2.6 kernels
if use kernel_linux
then
kernel_is 2 6 && mv -f "${PATCHDIR}"/*kernel-2.4* "${EXCLUDED}"
fi
# There is only one tree being maintained now. No numeric exclusions need
# to be done based on DRM tree.
}
src_unpack_linux() {
convert_to_m "${SRC_BUILD}"/Makefile
}
src_unpack_freebsd() {
# Link in freebsd kernel.
ln -s "/usr/src/sys-${K_RV}" "${WORKDIR}/sys"
# SUBDIR variable gets to all Makefiles, we need it only in the main one.
SUBDIRS=${VIDCARDS//.ko}
sed -i -e "s:SUBDIR\ =.*:SUBDIR\ =\ drm ${SUBDIRS}:" "${SRC_BUILD}"/Makefile
}
src_unpack_os() {
if use kernel_linux; then
src_unpack_linux
elif use kernel_FreeBSD
then
src_unpack_freebsd
fi
}
src_compile_os() {
if use kernel_linux
then
src_compile_linux
elif use kernel_FreeBSD
then
src_compile_freebsd
fi
}
src_install_os() {
if use kernel_linux
then
src_install_linux
elif use kernel_FreeBSD
then
src_install_freebsd
fi
}
src_compile_linux() {
# remove leading and trailing space
VIDCARDS="${VIDCARDS% }"
VIDCARDS="${VIDCARDS# }"
check_modules_supported
MODULE_NAMES=""
for i in drm.${KV_OBJ} ${VIDCARDS}; do
MODULE_NAMES="${MODULE_NAMES} ${i/.${KV_OBJ}}(${PN}:${SRC_BUILD})"
i=$(echo ${i/.${KV_OBJ}} | tr '[:lower:]' '[:upper:]')
eval MODULESD_${i}_ENABLED="yes"
done
# This now uses an M= build system. Makefile does most of the work.
cd "${SRC_BUILD}"
unset ARCH
BUILD_TARGETS="modules"
BUILD_PARAMS="DRM_MODULES='${VIDCARDS}' LINUXDIR='${KERNEL_DIR}' M='${SRC_BUILD}'"
ECONF_PARAMS='' S="${SRC_BUILD}" linux-mod_src_compile
if linux_chkconfig_present DRM
then
ewarn "Please disable in-kernel DRM support to use this package."
fi
}
src_compile_freebsd() {
cd "${SRC_BUILD}"
# Environment CFLAGS overwrite kernel CFLAGS which is bad.
local svcflags=${CFLAGS}; local svldflags=${LDFLAGS}
unset CFLAGS; unset LDFLAGS
MAKE=make \
emake \
NO_WERROR= \
SYSDIR="${WORKDIR}/sys" \
KMODDIR="/boot/modules" \
|| die "pmake failed."
export CFLAGS=${svcflags}; export LDFLAGS=${svldflags}
}
die_error() {
eerror "Portage could not build the DRM modules. If you see an ACCESS DENIED error,"
eerror "this could mean that you were using an unsupported kernel build system."
eerror "Only 2.6 kernels at least as new as 2.6.6 are supported."
die "Unable to build DRM modules."
}
src_install_linux() {
linux-mod_src_install
# Strip binaries, leaving /lib/modules untouched (bug #24415)
strip_bins \/lib\/modules
}
src_install_freebsd() {
cd "${SRC_BUILD}"
dodir "/boot/modules"
MAKE=make \
emake \
install \
NO_WERROR= \
DESTDIR="${D}" \
KMODDIR="/boot/modules" \
|| die "Install failed."
}
pkg_postinst_os() {
if use kernel_linux
then
linux-mod_pkg_postinst
fi
}