Panda3D : coup de bambou sur la Gentoo
Par Jean-Seb le mardi 17 juin 2008, 22:37 - Linuxeries - Lien permanent
Vous avez une Gentoo , et vous voulez installer Panda3D.
emerge -va panda3d , c'est bien ça ?
Presque, petit scarabé, presque ...
Mises à jour :
- 20 juin 2008. (précisions sur l'intégration de l'ebuild)
- 23 juin 2008. (accélération du rendu sous MS-Windows)
Rendre à César...
- Ce billet s'inspire fortement d'un post sur le forum Panda3D:
Panda3D et portage
- Le problème est simple: Panda3D n'est disponible que dans une version très ancienne dans l'arbre portage.
- Et oui, ça arrive. Bien que cela soit heureusement très rare, il manque parfois des choses dans portage.
- Face à cela, deux possibilités:
- la mauvaise: compiler vous même Panda3D et l'installer comme vous le pouvez.
- la bonne: utiliser un overlay, ce qui vous permettra de suivre proprement les évolutions de version.
Petit rappel sur les overlays
- Un overlay , c'est une série de ebuild additionnels non supportés dans l'arbre portage officiel.
Préparation de l'ebuild
- Je pars du principe que votre overlay se situe ici:
/usr/local/portage
- Vérifiez que votre make.conf contient la ligne suivante,
sinon emerge ne trouvera pas votre overlay:
- PORTDIR_OVERLAY="/usr/local/portage"
- Créez le chemin de l'overlay de l'ebuild:
mkdir -p /usr/local/portage/media-libs/panda3d/
- Voici l'ebuild à copier dans le répertoire précédemment créé
- J'ai récupéré (et adapté légèrement) cet ebuild sur le forum de Panda3D
- Fichier panda3d-1.5.2.ebuild à placer dans /usr/local/portage/media-libs/panda3d/
# Copyright 2000-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# 1.4.2 'stable' by joeldg - blog.peoplesdns.com
# 1.5.2 par jseb (article sur www.finiderire.com)
# $Header: $
inherit eutils python
DESCRIPTION="A 3D framework in C++ with python bindings"
HOMEPAGE="http://panda3d.org"
SRC_URI="http://panda3d.org/download/${P}/${P}.tar.gz"
LICENSE="Panda3D"
SLOT="0"
KEYWORDS="~x86"
IUSE="png jpeg tiff fmod openal nspr python ssl truetype doc zlib"
DEPEND="doc? ( dev-python/epydoc )
png? ( media-libs/libpng )
jpeg? ( media-libs/jpeg )
tiff? ( media-libs/tiff )
nspr? ( >=dev-libs/nspr-4.4.1-r2 )
openal? ( media-libs/openal )
fmod? ( =media-libs/fmod-3* )
ssl? ( dev-libs/openssl )
truetype? ( media-libs/freetype )
zlib? ( sys-libs/zlib )
python? ( dev-lang/python )"
pkg_setup() {
ewarn "Please note that python bindings are now"
ewarn "set by the python USE flag to coordinate"
ewarn "with upstream."
}
src_unpack()
{
unpack ${A}
}
src_compile()
{
#
# the everything keyword has checks for your current libs
# and will skip them if not available..
# this also adds support for maya and max models.
#
./makepanda/makepanda.py --everything || die "build failed"
}
src_install()
{
dodir /opt/panda3d
doenvd ${FILESDIR}/50panda3d
sed -i -e "s:lib:$(get_libdir):g" \
${D}/etc/env.d/50panda3d \
|| die "libdir patching failed"
#construire la doc, quoiqu'il arrive
cp -R ${S}/samples ${S}/built
cp -R ${S}/direct/src ${S}/built/direct/src
cd ${S}/built
if use python ; then
# python installation
python_version
dodir /usr/$(get_libdir)/python${PYVER}/site-packages
cat <<- EOF > ${D}/usr/$(get_libdir)/python${PYVER}/site-packages/panda3d.pth
# This document sets up paths for python to access the
# panda3d modules
/opt/panda3d/lib
/opt/panda3d/direct
/opt/panda3d/pandac
/opt/panda3d/built
/opt/panda3d/built/$(get_libdir)
EOF
fi
cp -R ${S}/direct/src ${S}/built/direct/
cp -R ${S}/built/* ${D}/opt/panda3d
use python && touch ${D}/opt/panda3d/built/__init__.py
}
pkg_postinst()
{
elog "Panda3d is installed in /opt/panda3d"
elog
if use doc ; then
elog "Documentation is avaliable in /opt/panda3d/doc"
elog "Samples are avalaible in /opt/panda3d/samples"
fi
elog "For C++ compiling, include directory must be set:"
elog "g++ -I/opt/panda3d/include [other flags]"
if use python ; then
elog
elog "ppython is depricated and panda3d modules are"
elog "now installed as standard python modules."
fi
elog
elog "Tutorials avaliable at http://panda3d.org"
}
- note : si la commande ebuild refuse
le script précédent, c'est probablement à cause d'un problème de tabulations
transformées en espaces.
- Pour résoudre ce problème, vous pouvez éditer le fichier et transformer les espaces de débuts de lignes en tabulations.
- avec Vim :
:%s/^\ \+/\t/g
- Il faut créer le journal (qui consiste en une liste de checksum des
fichiers impliqués) de l'ebuild
- Cette opération est à refaire à chaque modification de l'ebuild.
- La première fois est plus longue, car les sources sont chargées pour calculer leur checksum.
jseb panda3d # ebuild /usr/local/portage/media-libs/panda3d/panda3d-1.5.2.ebuild digest >>> Creating Manifest for /usr/local/portage/media-libs/panda3d
- Il faut également récupérer un fichier dans l'arbre portage officiel.
- Il s'agit du fichier /usr/portage/media-libs/panda3d/files/50panda3d
- Il faut donc créer un sous-répertoire files dans votre overlay panda3d, et le placer à l'intérieur.
- Ce fichier contient des informations d'installation pour Panda3D et est utilisé par emerge.
emerge
emerge -va panda3d
- Les slots des différents arbres portage (l'officiel et le votre) qui contiennent Panda3D doivent apparaitre (à la fin des messages de emerge)
[0] /usr/portage [1] /usr/local/portage
- Ne vous en faites pas pour les options, la compilation de Panda3D est lancée via un script Python.
- Le lancement de la compilation dans l'ebuild se fait ainsi:
./makepanda/makepanda.py --everything- Si un jour vous le construisez vous même, il est important de partir de la racine du répertoire de sources (ce que l'on fait ici).
- L' option --everything construira Panda3D avec le maximum de packages disponibles sur votre système.
- La compilation est assez longue, y compris sur une machine moderne bien
dotée en ram.
- ccache n'est pas utilisé pour les ebuild en dehors de l'arbre officiel portage.
- quand j'aurai trouvé comment faire, je mettrai à jour ce billet. Si vous savez le faire, postez un commentaire, merci.
- Panda3D sera installé à part dans son répertoire /opt/panda3d
- Ceci est normal et souhaitable.
Vérification des fichiers après emerge
- /etc/ld.so.conf : doit contenir
/opt/panda3d/lib(le ldconfig est fait par emerge à la fin de la compilation)- sinon on peut éventuellement modifier à la main la variable LD_PATH_CONFIG pour faire un essai.
- /usr/lib/python2.5/site-packages/ doit contenir un path Python (normalement: panda3d.pth )
jseb jseb # cat /usr/lib/python2.5/site-packages/panda3d.pth # This document sets up paths for python to access the # panda3d modules /opt/panda3d/lib /opt/panda3d/direct /opt/panda3d/pandac /opt/panda3d/built /opt/panda3d/built/lib
- Si, lorsque vous lancez un exemple (/opt/panda3d/samples/), Python
ne trouve pas les import de Panda3D, vous aurez deux liens symboliques à créer
vous même
ln -s /opt/panda3d/direct/ /usr/lib/python2.5/site-packages/ln -s /opt/panda3d/pandac/ /usr/lib/python2.5/site-packages/
Attention à créer les liens dans la bonne version de Python (ici, 2.5) si celui-ci est slotté (cohabitation avec une autre version). Prendre la version utilisée par défaut lors du lancement de la commande Python.
Le nirvana est en vue
- Si vous obtenez un segfault lors de l'exécution de l'exemple
Asteroids, vous avez probablement un problème avec le son.
- Par défaut, OpenAL est utilisé, et cela semble poser quelques problèmes pour l'instant.
- Vous pouvez couper le son dans le fichier de config , pour vérifier qu'il
s'agit bien de cela.
- dans /opt/panda3d/etc/Config.prc , commentez cette entrée :
audio-library-name p3openal_audio
- Sil il s'agit bien de cela, vous pouvez utiliser fmod
(attention, bibliothèque non-libre) ou choisir de rétablir OpenAL.
- J'ai écrit que vous pouviez rétablir OpenAL, car dans mon cas cela a suffit (après avoir lancé l'exemple asteroids en nosound, j'ai rétabli l'entrée dans le fichier de config Panda3D).
- Pour remplacer OpenAL par Fmod
- dans /opt/panda3d/etc/Config.prc :
audio-library-name fmod_audio
Pour les utilisateurs de MS-Windows
- Vous êtes un utilisateur de MS-Windows et vous avez lu jusque là. C'est gentil.
- Panda3D rame, c'est un fait. Il y a cependant moyen d'améliorer la
situation.
- Dans le fichier Config.prc , remplacez le rendering OpenGL par DirectX.
#load-display pandagl load-display pandadx8
- Pour éviter d'utiliser la version de Python fournie avec l'installeur des binaires de Panda3d, vous pouvez simplement utiliser les path déja évoqués ci-dessus
import sys sys.path.append(repertoire_panda3d)
- On peut aussi demander à Python d'ajouter un
path
au démarrage.- Il faut placer un fichier dans la racine du répertoire Python:
- Contenu de panda3d.pth
panda152 panda152/bin
- Ce fichier spécifie simplement les répertoires contenant les binaires (tools de Panda3D) et le répertoire racine de Panda3D, par rapport au répertoire racine de Python.
- Ici, le répertoire de Panda3D se nomme donc panda152 et est placé dans le répertoire racine de Python.
- Vous pouvez ensuite effacer le répertoire Python fourni avec l'installeur de Panda3D.