Compiler Minefield sur les distributions linux « moins grand publics » – Partie 1 – Frugalware Linux.

Depuis l’an 2000 (en gros), j’ai pu faire compiler à mes différentes machines (PC sous Windows ou Linux, ou encore mon MacMini à l’époque de MacOS-X Tiger) le code source de la suite Mozilla (devenue SeaMonkey) puis de Mozilla Firefox et de Mozilla Thunderbird, ce qui m’a permis de vivre leur évolution depuis près de 10 ans.

Pour fêter ces 10 ans (déjà !), j’ai décidé de faire une série de tutoriels pour montrer comment faire compiler Mozilla Firefox – du moins le code du tronc connu comme MineField (champ de mines) – sur les distributions linux moins « grand public ».

Le premier article est consacré à la Frugalware Linux. Je ferais aussi des articles pour la Slackware et pour la ArchLinux. Les distributions plus « connues » que sont Ubuntu Linux ou encore la Fedora sont déjà couverte via le biais de la debian et de la RedHat sur cette page consacrée aux développeurs sur le site de la Fondation Mozilla : https://developer.mozilla.org/En/Developer_Guide/Build_Instructions/Linux_Prerequisites

La Frugalware Linux est une version 1.1 en 64 bits que j’ai fait passé vers current. L’ayant installé depuis le DVD, j’ai rajouté le groupe « devel » ce qui me permet d’avoir 99% des outils de compilation.

Le point ennuyeux ? L’absence d’autoconf 2.13 qui est indispensable pour lancer la compilation du code source. Cf le bug 104642 sur le bugzilla de Mozilla.

Continuer la lecture de « Compiler Minefield sur les distributions linux « moins grand publics » – Partie 1 – Frugalware Linux. »

L’ultime compilation live des NiN ?

Même si Trent Reznor a annoncé la « fin » de Nine Inch Nails en 2009, les fans font preuve d’une créativité sans commun pour rendre hommage à ce groupe mythique.

Un exemple récent est une compilation des morceaux en live de NiN pour la tournée de 2009, qui s’appelle « nine inch nails banged and blown through (live 2009) »

Couverture de la compilation  "Banged and Blown through"

Composée de 90 titres pour une compilation d’environ 6 CDs (!!!), elle couvre l’ensemble des concerts de l’ultime tournée. Je n’ai pas encore écouté l’ensemble, mais je pense qu’il va y avoir de la gravure de CD très bientôt 😉

NiN Quiet : un album hommage au coté calme du groupe de Mr Self Destruct.

Quiet est une compilation non officielle sortie en 2009 par des fans du groupe Nine Inch Nails.

C’est un vrai bonheur que d’entendre une version acoustique de « The Fragile », ainsi que certains remix qui sont de vrais bijoux (comme le « Meet Your Master » au piano).

Cet album m’a aussi permis de découvrir certains morceaux que je ne connaissais pas comme « The Perfect Drug ».

A noter que quelques pistes de l’instrumental « Ghosts I-IV » font partie de la compilation.

Une assez bonne compilation, qui ne demande qu’une chose : être écoutée plusieurs fois de suite. Pour la récupérer, il faut aller sur des trackers bitorrents – tipiak – comme Mininova ou PirateBay.

Bon téléchargement 😉

Compiler Amarok 2.2 rc1 sur Archlinux.

Comme le paquet pour Amarok 2.2rc1 n’est pas encore disponible au moment où je rédige cet article, voici le chemin à suivre.

La compilation d’Amarok 2.2rc1 nécessite la recompilation de deux paquets en plus, taglib en version 1.6 pour supporter les fichiers mp4 (joie) et asf (sans commentaires). Et de son corollaire, taglib-extras.

Pour les PKGBUILD ci-dessous, tous ont été modifiés dans leur ligne pkgver et md5sums. Le PKGBUILD concernant taglib a vu sa ligne cmake modifié pour des raisons expliquées par la suite.

# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
# Maintainer: Tobias Powalowski

pkgname=taglib
pkgver=1.6
pkgrel=1
pkgdesc= »library for reading and editing the meta-data of several popular audio formats. »
arch=(‘i686’ ‘x86_64’)
url= »http://ktown.kde.org/~wheeler/taglib.html »
license=(‘GPL2’)
depends=(‘zlib’ ‘gcc-libs’)
makedepends=(‘cmake’ ‘pkgconfig’)
# svn snapshot: svn co svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib
source=(http://ktown.kde.org/~wheeler/files/src/taglib-$pkgver.tar.gz
#ftp://ftp.archlinux.org/other/kde/$pkgname-$pkgver.tar.bz2
#http://belnet.dl.sourceforge.net/sourceforge/soprano/soprano-1.97.1-beta4.tar.bz2
)
options=(!libtool)

build() {
# start building
cd $startdir/src/$pkgname-$pkgver

cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DWITH_MP4=ON -DWITH_ASF=ON
make VERBOSE=1 || return 1
make DESTDIR=$startdir/pkg install || return 1
}

md5sums=(‘5ecad0816e586a954bd676a86237d054’)

Pour taglib-extras :

# $Id$
# Maintainer: Tobias Powalowski

pkgname=taglib-extras
pkgver=1.0.1
pkgrel=1
pkgdesc= »Additional taglib plugins for KDE »
arch=(« i686 » « x86_64 »)
url= »http://developer.kde.org/~wheeler/taglib.html »
license=(‘LGPL’)
depends=(‘taglib>=1.5’)
makedepends=(‘pkgconfig’ ‘cmake’ ‘automoc4’)
source=(http://www.kollide.net/~jefferai/${pkgname}-${pkgver}.tar.gz)

build() {
cd $srcdir/$pkgname-$pkgver
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_SKIP_RPATH=ON || return 1
make || return 1
make DESTDIR=$pkgdir install
}
md5sums=(‘e973ca609b18e2c03c147ff9fd9e6eb8’)

Et enfin Amarok :

# $Id: PKGBUILD 52359 2009-09-18 19:49:27Z giovanni $
# Contributor: damir

pkgname=amarok
replaces=(‘amarok-base’ ‘amarok-engine-xine’ ‘amarok-base-mysqlfree’)
pkgver=2.1.90
pkgrel=1
pkgdesc= »A media player for KDE »
arch=(« i686 » « x86_64 »)
url= »http://amarok.kde.org »
license=(‘GPL2’ ‘LGPL2’ ‘FDL’)
depends=(‘mysql>=5.1.37’ ‘kdebase-runtime>=4.3’ ‘libmtp>=0.3.7’ ‘libgpod>=0.7.2’
‘libmp4v2’ ‘qtscriptgenerator>=0.1.0’ ‘taglib-extras>=0.1.7’
‘liblastfm>=0.3.0’ ‘loudmouth>=1.4.3’ ‘hicolor-icon-theme’)
makedepends=(‘pkgconfig’ ‘automoc4’ ‘cmake’)
install=amarok.install
source=(« http://download.kde.org/unstable/${pkgname}/${pkgver}/src/${pkgname}-${pkgver}.tar.bz2 »)
md5sums=(‘ec727ed72c5d371fb659ce0c3c1e6136’)

build() {
cd ${srcdir}
mkdir build
cd build
cmake ../${pkgname}-${pkgver} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SKIP_RPATH=ON \
-DCMAKE_{SHARED,MODULE,EXE}_LINKER_FLAGS=’-Wl,–no-undefined -Wl,–as-needed’ \
-DCMAKE_INSTALL_PREFIX=/usr
make || return 1
make DESTDIR=${pkgdir} install || return 1
}

Chaque paquet a eu droit au duo :

makepkg

Puis :

yaourt -U nom du paquet

Après une compilation assez longue – ah la rapidité de compilation du code C++ – j’ai pu installé le nouvel http://amarok.kde.org/ fraichement compilé. Et enfin, le lancer.

Ecran de démarrage d'Amarok 2.2rc1

Amarok 2.2 rc1 en action

Nouvel écran d’accueil, plus souple, plus interactif, du genre : page wikipedia qui apparait quand la musique s’arrête, et paroles qui prennent le dessus dans le cas inverse. Bref, un grand cru pour Amarok !

Vers un coeur commun entre Shiretoko, Shredder et SeaMonkey 2 ?

C’est une idée envisageable, étant donné que le dépot du code source de Shredder et de SeaMonkey pré-2.0 viennent de migrer, abandonnant le vieux dépot CVS vers un dépot mercurial.

Si l’on veut compiler soit-même le code source dit du « tronc » des logiciels de la Fondation Mozilla, que ce soit Shiretoko, Shredder ou SeaMonkey pré-2.0, il faut maintenant passer par des dépots mercurial.

Si le développement de Shiretoko est maintenant bien ancré sur un dépot mercurial, à savoir mozilla-central, c’est loin d’être le cas pour Shredder et SeaMonkey pré-2.0. Voici donc comment compiler Shredder ou SeaMonkey en utilisant le dépôt mercurial comm-central.

Déjà, il faut avoir autoconf 2.13 et mercurial pré-installé. Pour cela, il faut se conférer à la documentation de votre distribution pour savoir comment faire.

Ensuite, il faut récupérer le code source commun à Shredder et SeaMonkey pré-2.0 :

hg clone http://hg.mozilla.org/comm-central/ src

Une fois le code récupéré, il faut récupérer le complément à savoir le code en commun avec Shiretoko :

python client.py checkout

Pour cette partie, l’outil CVS configuré correctement est indispensable. En clair, il faut que la variable CVSROOT soit définie ainsi :

export CVSROOT= »:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot »

Vient le moment stratégique, préparer le .mozconfig pour les options de compilation. Il faut ajouter les deux lignes suivantes :

ac_add_options --enable-application=mail
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-tb

Et virer un . $topsrcdir/mail/config/mozconfig qui aurait pu s’y trouver si on récupère un vieux fichier .mozconfig

Voici pour information mon .mozconfig pour Shredder :

#
# See http://www.mozilla.org/build/ for build instructions.
#

ac_add_options –enable-application=mail
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-tb

# Options for ‘configure’ (same as command-line options).
ac_add_options –enable-optimize= »-Os -march=native -w -pipe »
ac_add_options –disable-debug
ac_add_options –disable-tests
ac_add_options –enable-default-toolkit=cairo-gtk2
ac_add_options –enable-static
ac_add_options –disable-shared

Ensuite, il suffit de lancer la compilation et d’attendre.

Et voici ce que donne une boite « about » d’un Shredder compilé avec le code source du dépôt mercurial comm-central.

Shredder pré-alpha2 ?

Les pages qui m’ont aidé pour rédiger cet article :

http://wiki.mozilla.org/SeaMonkey:hg-based_build
http://developer.mozilla.org/en/docs/Mozilla_Source_Code_(Mercurial)
http://developer.mozilla.org/en/docs/Comm-central_source_code_(Mercurial)
http://developer.mozilla.org/en/docs/comm-central

C’est long de compiler un firefox ?

Compiler le code source de firefox, ce n’est pas trop compliqué, surtout si l’on suit les instructions fournies par le wiki des développeurs de la Fondation Mozilla.

< Mode troll de la mort qui tue, quoique…>
Même si mettre en place l’environnement de compilation sous des Unix (Linux, BSD libres, Solaris et MacOS-X) est largement plus simple que sous Windows 😉
</ Mode troll de la mort qui tue, quoique…>

Bref, une fois l’environnement de compilation mis en place, et le code source récupéré via CVS, on peut utiliser le .mozconfig suivant (Attention, fichier adapté pour la compilation du tronc, ou du code de la future version Beta 1 de Firefox).

Si vous désirez récupérer le code de Firefox 3.0 beta 1 pour le compiler, en gardant à l’esprit que ce n’est toujours qu’une version candidate à la version beta 1 officielle.

cvs co -r FIREFOX_3_0b1_RELEASE mozilla/client.mk mozilla/browser/config

Ensuite, on copie le .mozconfig suivant dans le répertoire .mozilla :

# See http://www.mozilla.org/build/ for build instructions.
#

export MAKEOPTS= »-j2″

. $topsrcdir/browser/config/mozconfig

# Options for ‘configure’ (same as command-line options).
ac_add_options –enable-optimize= »-Os -w -pipe »
ac_add_options –disable-debug
ac_add_options –disable-tests

ac_add_options –enable-default-toolkit=cairo-gtk2

ac_add_options –enable-strip
ac_add_options –disable-updater
ac_add_options –disable-mochitest

On récupère le code source :

make -f client.mk checkout

Enfin, on fait une copie du code source récupéré :

cd ..
tar cvf moz-fox.tar mozilla/ ; bzip2 -vv9 *.tar

On retourne dans le répertoire du code source, et on lance la compilation en chronométrant l’ensemble :

cd mozilla
time make -f client.mk ; make -C browser/installer

Une fois la compilation finie, on trouvera un fichier .zip ou .tar.bz2 contenant le firefox recompilé ne demandant plus qu’à être testé 😉

Pour donner un exemple : AMD Sempron 3100+ épaulé avec 1,5 Go de mémoire vive, gcc 4.2 et Ubuntu Linux 7.10 AMD64 :


real 46m28.493s
user 36m30.177s
sys 4m10.656s

Pour le support du compilateur gcc 4.2, j’ai rajouté les lignes suivantes dans le .mozconfig :


export CC=gcc-4.2
export CXX=g++-4.2

Je sais que c’est long, mais au moins, on voit le travail nécessaire pour la compilation d’un navigateur récent et au code moderne 😉