JS (aussi appelé SpiderMonkey) est le moteur JavaScript et WebAssembly de Mozilla écrit en C++ et en Rust. Dans BLFS, le code source de JS provient de Firefox.
This package is known to build and work properly using an LFS-11.2 platform.
Tlchargement (HTTP) : https://archive.mozilla.org/pub/firefox/releases/91.12.0esr/source/firefox-91.12.0esr.source.tar.xz
Somme de contrle MD5 : 8887bf394e4caec1af09e7568cfaed9e
Taille du tlchargement : 363 Mo
Estimation de l'espace disque requis : 3,0 Go (37 Mo installé après avoir supprimé 33 Mo de bibliothèques statiques)
Estimation du temps de construction : 1,7 SBU (avec parallélisme = 4)
ICU-71.1, rustc-1.60.0 et Which-2.21
LLVM-14.0.6 (avec Clang, requis pour les systèmes 32 bits sans SSE2)
Notes utilisateur : https://wiki.linuxfromscratch.org/blfs/wiki/js91
Contrairement à la plupart des autres paquets dans BLFS, les
instructions ci-dessous requièrent que vous décompressiez
firefox-91.12.0esr.tar.xz
et
entriez dans le répertoire firefox-91.12.0
.
L'extraction de l'archive remettra les permissions du répertoire
actuel à 0755 si vous avez les permissions nécessaires pour cela.
Si vous faites cela dans un répertoire avec le bit sticky, comme
/tmp
, le processus terminera avec
des messages d'erreur :
tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-xr-t: Operation not permitted
tar: Exiting with failure status due to previous errors
Cela termine bien avec un statut différent de zéro, mais ne
signifie PAS qu'il y a un
vrai problème. Ne désarchivez pas en tant qu'utilisateur
root
dans un répertoire où le bit
sticky est présent, cela le désactiverait.
Installez JS en excutant les commandes suivantes :
Si vous compilez ce paquet dans un chroot vous devez faire deux
choses. Tout d'abord, en tant qu'utilisateur root
, assurez-vous que /dev/shm
est monté. Si vous ne le faites pas,
la configuration de Python
échouera avec un trace évoquant /usr/lib/pythonN.N/multiprocessing/synchronize.py
.
Lancez :
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
Deuxièmement, vous devez soit exporter en tant qu'utilisateur
root
la variable d'environnement
$SHELL
avec export SHELL=/bin/sh, soit
rajouter SHELL=/bin/sh
devant
l'invocation de la commande configure.
La compilation du code C++ respecte $MAKEFLAGS et utilise « j1 » par défaut, le code rust utilisera tous les processeurs.
mkdir obj && cd obj && sh ../js/src/configure.in --prefix=/usr \ --with-intl-api \ --with-system-zlib \ --with-system-icu \ --disable-jemalloc \ --disable-debug-symbols \ --enable-readline && make
Pour lancer la suite de tests de JS, lancez : make -C js/src check-jstests JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled". Il est recommandé de rediriger la sortie vers un fichier journal. Comme nous construisons avec l'ICU du système, plus d'une centaine de tests, sur un total de plus de 40 000 tests, sont connus pour échouer.
Pour lancer la suite de tests du JIT, lancez : make -C js/src check-jit-test JITTEST_EXTRA_ARGS="--timeout 300".
Un problème avec le processus d'installation fait que les programmes qui se lient à la bibliothèque partagée JS91 (par exemple, GNOME Shell) crashent si JS91 est mis à jour ou réinstallé. Pour contourner le problème, supprimez l'ancienne version de la bibliothèque partagée JS91 avant l'installation :
rm -fv /usr/lib/libmozjs-91.so
Maintenant, en tant qu'utilisateur root
:
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js91-config
sh
../js/src/configure.in : configure.in
est en fait un script shell, mais le
bit exécutable n'est pas présent dans son mode de permission donc
il est nécessaire de le lancer explicitement avec sh.
--with-intl-api
: cela
active les fonctions d'internationalisation requises par
Gjs.
--with-system-*
: ces
paramètres permettent au système de construction d'utiliser les
version système des bibliothèques précédentes. Ils sont requis pour
plus de stabilité.
--enable-readline
: ce
paramètre active la prise en charge de Readline dans le shell JS.
--disable-jemalloc
:
ce paramètre désactive l'allocateur de mémoire interne utilisé dans
JS91. jemalloc est conçu uniquement pour l'environnement du
navigateur Firefox. Si JS91 utilise jemalloc, les autres
applications qui l'utilisent peuvent crasher quand des éléments
alloués par jemalloc sont libérés avec l'allocateur du système
(glibc).
--disable-debug-symbols
: ne
génère pas les symboles de débogage parce qu'ils sont très gros et
que la plupart des utilisateurs n'en ont pas besoin. Supprimez-le
si vous voulez déboguer JS91.
rm -v /usr/lib/libjs_static.ajs : supprimez une grosse bibliothèque statique qui n'est utilisée par aucun paquet de BLFS.
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js91-config : évite que js91-config n'utilise des CFLAGS bogués.
: BLFS préférait utiliser gcc et g++ au
lieu des programmes clang utilisés
en amont par défaut. Avec la sortie de gcc-12 la construction prend
plus de temps avec gcc et g++ surtout à cause d'avertissements
supplémentaires et est plus grosse. Passez ces variables
d'environnement au script configure si vous souhaitez continuer
d'utiliser gcc, g++ (en les exportant et les nettoyant après
l'installation, ou simplement en les ajoutant devant la commande
sh
../js/src/configure.in). Si vous construisez sur un
système 32 bits, voir aussi ci-dessous.
CC=gcc
CXX=g++
: utiliser SSE2 au lieu de 387
pour les opérations en virgule flottante en double précision. C'est
requis par GCC pour satisfaire les attentes des développeurs en
amont (Mozilla) pour l'arithmétique en virgule flottante. Utilisez
cette option si vous construisez ce paquet sur un système
32 bits avec GCC (si Clang n'est pas installé ou que vous
spécifiez explicitement GCC). Remarquez que cela fera crasher JS
sur un processeur sans SSE2. Si vous lancez le système sur un
processeur aussi vieux, Clang est nécessaire. Ce paramètre n'est
pas requis sur les systèmes 64 bits car tous les processeurs
x86 64 bits prennent en charge SSE2 et les compilateurs
64 bits (aussi bien Clang que GCC) utilisent SSE2 par défaut.
CXXFLAGS="-msse2
-mfpmath=sse"
Last updated on