La compilation de sources pour Solaris/Sparc est rendue
compliquée par la présence de nombreux outils de
développement et de librairies pas toujours compatibles entre
eux.
L'avantage de posséder tous ces outils permet la compilation de
plusieurs manières (optimisé pour Sparc,
compatibilité GNU, etc...) mais attention aux mélanges.
Pour cette raison, il est nécessaire de cloisonner ces outils en
adaptant les PATH de l'environnement de développement.
Sun nous fourni gratuitement tous les outils nécessaires pour le
développement et ces outils sont :
Le compagnon CD, fourni avec Solaris 10. Il contient les outils GNU,
librairies complémentaires et il est installé par
défaut dans /usr/sfw. Dans /opt/sfw, vous trouverez
également des outils GNU mais encore plus anciens ;) .
SunStudio 11, en téléchargement sur le site de Sun. il
contient (entre autres), l'IDE (interface graphique de
développement), les compilateurs optimisé Sun, etc... et
il est installé par défaut dans /opt/SUNWspro
Je conseille la création d'un utilisateur dédié
au développement.
Ouvrir un terminal et passer en root
$ su root
Création d'un utilisateur nommé "dev"
$ adduser -d /export/home/dev -m
-s /bin/bash -c "Utilisateur de dev" dev
ne pas oublier d'attribuer un mot de passe à cet utilisateur
$ passwd dev devpassword
Ensuite, nous profitons d'être connecté en root pour
adapter le PATH des librairies.
Pour cela, nous utiliserons l'utilitaire crle puisque l'utilisation de
la variable LD_LIBRARY_PATH est hautement déconseillée.
Pour visualiser le PATH actuel, lancez simplement crle dans le terminal.
Pour adapter le nouveau PATH tapez :
$ crle -c /var/ld/ld.config -l /lib:/usr/lib:/usr/sfw/lib
(Attention cette commande peut rendre inutilisable le système
en
cas d'erreur)
Nota : L'ordre du PATH des librairies est très importante au
même titre que la PATH des binaires que nous verrons plus loin.
Le système va parcourir dans cet ordre les librairies pour
trouver celles qu'il a besoin. Si plusieurs librairies sont identiques
(pas forcement les versions), il s'arrêtera sur la
première trouvée.
En retapant crle, vous visualiserez la nouvelle configuration de PATH
des librairies du système (valable pour tous les utilisateurs du
système).
Voilà pour les librairies, passons maintenant aux binaires.
Avec l'installation du compagnon CD et de SunStudio, Sun nous fourni
pas moins de trois versions différentes de make :
- make, la version de Solaris
- dmake la version de SunStudio
- gmake la version GNU
Dans le cas de Firefox, il est indiqué que seul le GNU make
fonctionne.
plusieurs possibilités s'offrent donc pour utiliser cette
version mais j'ai opté pour une manip présentée
sur le site de Sun :
Connectez vous avec l'utilisateur "dev"
Créez un répertoire bin à la racine de son HOME
$ mkdir ~/bin
Entrez dans ce répertoire et créez les liens symboliques suivants :
$ cd ~/bin
$ ln -s /opt/SUNWspro/bin/dmake dmake
$ ln -s /usr/sfw/bin/gmake gmake
$ ln -s gmake make
$ ln -s /bin/perl perl5
$ ln -s /usr/ccs/bin/make solaris_make
Cette manip permet de définir facilement la version du make
souhaitée.
Adaptons maintenant le PATH des binaires.
Lors de la connexion de l'utilisateur (avec le Shell Bash) sur JDS , le
système va lire le fichier ~/.profile de l'utilisateur.
Nous allons le modifier avec les paramètres nécessaires
pour le développement :
vi ~/.profile
# This is the default standard profile provided to a user.
# They are expected to edit it to meet their own needs.
MAIL=/usr/mail/${LOGNAME:?}
PATH=/export/home/johann/bin:/usr/bin:/usr/ccs/bin:/opt/SUNWspro/bin:/usr/sfw/bin
MANPATH=/opt/SUNWspro/man:/usr/sfw/man:${MANPATH:=/usr/share/man}
export CC=cc
export CXX=CC
export CFLAGS="-xlibmil"
export CXXFLAGS="-xlibmil -xlibmopt -features=tmplife -norunpath"
export LDFLAGS="-R'\$\$ORIGIN:\$\$ORIGIN/..' -R/usr/sfw/lib -R/opt/sfw/lib"
Il suffit ensuite de se déconnecter/reconnecter au compte
"dev".
L'environnement de développement est prêt
Deux possibilités pour les récupérer sont
possibles :
Via cvs ou manuellement en téléchargeant le tarball sur
le site de mozilla.
Pour ma part, j'ai préféré le tarball plutôt
que cvs. Ce dernier automatise beaucoup de tâches et cette
automatisation pose problème sous Solaris puisque nous allons
devoir intervenir manuellement à différentes étape
de la compilation.
Décompressez l'archive des sources, vous obtiendrez un
répertoire mozilla contenant tout ce qu'il faut.
Créer un répertoire qui contiendra l'arborescence de
compilation de Firefox (ce répertoire s'appelle OBJDIR).
$ mkdir mozilla/firefox-static
Créez ensuite le fichier de configuration global à la
suite mozilla. Dans notre cas (compilation uniquement de Firefox), ce
fichier indiquera uniquement le chemin d'accès au fichier de
configuration spécifique à Firefox.
création du fichier de conf global :
$ vi mozilla/mozconfig
. $topsrcdir/browser/config/mozconfig
création du fichier de conf Firefox
$ vi mozilla/browser/config/mozconfig
mk_add_options MOZ_CO_PROJECT=browser
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-static
ac_add_options --enable-application=browser
ac_add_options --enable-optimize="-xO3"
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --enable-xft
ac_add_options --enable-svg
ac_add_options --disable-freetype2
ac_add_options --disable-auto-deps
ac_add_options --disable-tests
ac_add_options --enable-static --disable-shared
ac_add_options --enable-official-branding
ac_add_options --enable-default-toolkit=gtk2
mk_add_options BUILD_OFFICIAL=1
mk_add_options MOZILLA_OFFICIAL=1
Il faut maintenant indiquer à l'environnement où se
trouve le fichier de configuration global :
$ export MOZCONFIG=chemin_absolu_vers_mozilla/mozconfig
Remplacez évidemment "chemin_absolu_vers_mozilla" par votre chemin.
Déplacez-vous dans le répertoire /mozilla/firefox-static (OBJDIR)
$ cd mozilla/firefox-static
Vous pouvez à ce moment là lancer l'interface de
développement de SunStudio à partir de ce terminal (pour
garder la variable MOZCONFIG) ou dans le terminal.
Je continuerai ce tuto en restant dans le terminal (je suis
habitué à vi) mais l'IDE de SunStudio est
particulièrement efficace.
Lancez la commande :
$ ../configure
Si tout se passe bien, cette commande va générer
(entre
autres) le fichier mozilla/config/autoconf.mk
Malheureusement, ce fichier comportera des erreurs sur notre plateforme
à cause de quelques bugs (notamment des codages en dur dans les
sources de PATH de librairies qui ne correspondent pas à
Solaris).
Nous allons donc reprendre manuellement le fichier
mozilla/config/autoconf.mk avant de poursuivre
$ vi mozilla/firefox-static/config/autoconf.mk
corrigez la ligne MOZ_CAIRO_LIBS pour avoir ceci :
MOZ_CAIRO_LIBS = -lmozcairo -lmozlibpixman -L/usr/openwin/lib\
-R/usr/openwin/lib -L/usr/sfw/lib -lXrender -lfreetype -lfontconfig
info : les libs Xrender et Freetype2 se trouvent dans /usr/sfw/lib
et nous devons rajouter -lfontconfig
info générale : le -L indique le chemin absolu
d'accès aux librairies, -l indique le nom de la librairie
En cas de problème lors d'une compilation, cette connaissance
est importante pour débugger la compilation. Souvent les erreurs
proviennent des librairies (versions ou chemins).
Si lors de la compilation, le compilateur ne trouve pas une librairies,
vérifiez la ligne de compilation juste avant la première
erreur.
Regardez que les chemins des libs envoyés au compilateur sont
correctes. L'utilitaire pkginfo --libs nom_de_librairie vous donne le
chemin de la librairie sur votre système.
Un autre fichier comportant une erreur est à éditer :
mozilla/firefox-static/browser/app/makefile
$ vi mozilla/firefox-static/browser/app/Makefile
corrigez la ligne XLIBS pour avoir ceci :
LIBS += $(XLDFLAGS) $(XLIBS) -lXft
info : C'est un problème similaire au
précédent,
la lib Xft contient des fonctions nécessaires lors de la
compilaltion du binaire firefox-bin et le makefile
généré lors du "configure" ne l'indique pas sur
notre plate-forme.
Revenez maintenant dans notre répertoire mozilla/firefox-static
et lançez la commande make
$ cd mozilla/firefox-static
$ make
info : le make que nous lançons et en fait le gmake (lien
symbolique que nous avons créé dans le HOME/bin)
La compilation se lance et va durer près de 3 heures (Sunblade
1000 750 Mhz mono proc).
A l'issue de cette compilation, nous allons créer le tarball
autonome de Firefox. Pour cela, à partir de votre
répertoire firefox-static lancez la commande :
$ make -C browser/installer
Cette commande devrait préparer automatiquement le tarball de
Firefox mais il y a malheureusement quelques problèmes :
L'archivage et la gestion des droits du tarball par "tar" coince et il
manquera quelques fichiers dans le répertoire Firefox.
Nous allons donc ajouter manuellement les fichiers manquants et
créer l'archive manuellemment.
La racine du tarball autonome se trouve dans
mozilla/firefox-static/dist/firefox
info : Les fichiers manquants sont nécessaires au bon
fonctionnement de Firefox en ssl
En ce qui concerne le problème de création automatique du
tarball, je ne me suis pas vraiment penché sur le
problème.
Ajoutons les fichiers manquants :
$ cd mozilla/firefox-static/dist/firefox
$ cp ../lib/libfreebl* ./
Créons le tarball :
Placez vous dans le répertoire firefox-static/dist
$ cd mozilla/firefox-static/dist
$ tar -cvf firefox.tar firefox
(Optionnel) Compressez firefox.tar avec bzip2 par exemple :
$ bzip2 -z firefox.tar
Et voilà.
Ce tarball contient une version autonome (statique) de Firefox 1.5.0.6
pour Sparc.