JS-102.8.0

Introduction JS

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.3 platform.

Informations sur le paquet

Dépendances de JS102

Requises

ICU-72.1, rustc-1.67.1 et Which-2.21

Recommandées

Notes utilisateur : https://wiki.linuxfromscratch.org/blfs/wiki/js102

Installation de JS

[Note]

Note

Contrairement à la plupart des autres paquets dans BLFS, les instructions ci-dessous requièrent que vous décompressiez firefox-102.8.0esr.tar.xz et entriez dans le répertoire firefox-102.8.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 exécutant les commandes suivantes :

[Note]

Note

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 en Python échouera avec une trace faisant référence à /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.

Tout d'abord supprimez un drapeau obsolète dans le code python, qui a été supprimé dans python-3.11 :

grep -rl \"rU\" | xargs sed -i 's/"rU"/"r"/'

Exécutez ensuite :

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 50 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".

[Attention]

Attention

Un problème avec le processus d'installation fait que les programmes qui se lient à la bibliothèque partagée JS102 (par exemple, GNOME Shell) crashent si JS102 est mis à jour ou réinstallé. Pour contourner le problème, supprimez l'ancienne version de la bibliothèque partagée JS102 avant l'installation :

rm -fv /usr/lib/libmozjs-102.so

Maintenant, en tant qu'utilisateur root :

make install &&
rm -v /usr/lib/libjs_static.ajs &&
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js102-config

Explication des commandes

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 JS102. jemalloc est conçu uniquement pour l'environnement du navigateur Firefox. Si JS102 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 JS102.

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/js102-config : évite que js102-config n'utilise des CFLAGS bogués.

CC=gcc CXX=g++ : 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.

CXXFLAGS="-msse2 -mfpmath=sse" : 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 absolument 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.

Contents

Programmes installs: js102 et js102-config
Bibliothèques installes: libmozjs-102.so
Répertoires installs: /usr/include/mozjs-102

Descriptions courtes

js102

fournit une interface en ligne de commande au moteur JavaScript

js102-config

est utilisé pour trouver le compilateur JS et les drapeaux de l'éditeur de liens

libmozjs-102.so

contient les fonction de l'API de Mozilla JavaScript