JS (også referert til som SpiderMonkey) er Mozillas JavaScript og WebAssembly Motor, skrevet i C++ og Rust. I BLFS er kildekoden til JS hentet fra Firefox.
Denne pakken er kjent for å bygge og fungere riktig ved å bruke en LFS 12.0 plattform.
Nedlasting (HTTP): https://archive.mozilla.org/pub/firefox/releases/102.13.0esr/source/firefox-102.13.0esr.source.tar.xz
Nedlasting MD5 sum: 42b9a73626ed8281b86222f6f0a96c73
Nedlastingsstørrelse: 464 MB
Estimert diskplass som kreves: 3.3 GB (38 MB installert etter fjerning av 34 MB statiske biblioteker)
Estimert byggetid: 1.7 SBU (med parallellitet=4)
ICU-73.2, rustc-1.71.1, og Which-2.21
LLVM-16.0.5 (med Clang, påkrevd for 32-bits systemer uten SSE2 funksjoner)
![[Important]](../images/important.png) 
          
            Hvis du bygger denne pakken på et 32-bits system, og Clang ikke
            er installert eller du overstyrer standard kompilatorvalg med
            miljøvariabelen CXX, vennligst les
            Parameterforklaringer først.
          
![[Note]](../images/note.png) 
          
            I motsetning til de fleste andre pakker i BLFS, krever
            instruksjonene nedenfor deg å untar firefox-102.13.0esr.tar.xz og endre til
            firefox-102.13.0 mappen.
          
            Pakke ut tarballen vil tilbakestille tillatelsene til gjeldende
            mappe til 0755 hvis du har tillatelse til å gjøre det. Hvis du
            gjør dette i en mappe hvor den klebrige biten er satt, slik som
            /tmp vil det ende med
            feilmeldinger:
          
              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
            
            Dette avsluttes med ikke-null status, men det betyr IKKE at det er et reelt problem. Ikke
            untar som root bruker i en mappe
            der klebrig-biten er satt - det vil deaktivere den.
          
Installer JS ved å kjøre følgende kommandoer:
![[Note]](../images/note.png) 
          
            Hvis du kompilerer denne pakken i chroot, må du gjøre to ting.
            Først som root bruker, sørge for
            at /dev/shm er montert. Hvis du
            ikke gjør dette, Python
            konfigurasjonen vil mislykkes med en tilbakesporingsrapport som
            viser til /usr/lib/pythonN.N/multiprocessing/synchronize.py.
            Kjør:
          
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
            For det andre, enten som root
            bruker eksporter $SHELL miljøvariabel
            ved bruk av export
            SHELL=/bin/sh ellers sett SHELL=/bin/sh foran når du kjører configure kommandoen.
          
Å kompilere C++ koden respekterer $MAKEFLAGS og er standard til 'j1', rustkoden vil bruke alle prosessorer.
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
        For å kjøre JS testpakken, utsted: make -C js/src check-jstests JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled". Det anbefales å omdirigere utdataene til en logg. Fordi vi bygger med system ICU, mer enn hundre tester (av totalt mer enn 50 000) er kjent for å mislykkes.
For å kjøre JIT testpakken, utsted: make -C js/src check-jit-test JITTEST_EXTRA_ARGS="--timeout 300".
![[Caution]](../images/caution.png) 
          Et problem i installasjonsprosessen forårsaker at ethvert kjørende program som lenker til JS102 delt bibliotek (for eksempel GNOME Skall) til å krasje hvis JS102 oppgraderes eller installeres på nytt. For å omgå dette problemet, fjern den gamle versjonen av JS102 delte bibliotek før installasjon:
rm -fv /usr/lib/libmozjs-102.so
          Nå, som root bruker:
        
make install && rm -v /usr/lib/libjs_static.ajs && sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js102-config
          sh
          ../js/src/configure.in: configure.in er egentlig et skallskript, men den
          kjørbare biten er ikke satt i tillatelsesmodus, så det er nødvendig
          å eksplisitt kjøre den med sh.
        
          --with-intl-api: Dette
          aktiverer internasjonaliseringsfunksjoner som kreves av
          Gjs.
        
          --with-system-*: Disse
          parameterne tillater byggesystemet å bruke systemversjoner av
          bibliotekene ovenfor. Disse kreves for stabilitet.
        
          --enable-readline: Denne
          bryteren aktiverer Readline støtte i JS skallet.
        
          --disable-jemalloc: Denne
          bryteren deaktiverer intern minneallokator brukt i JS102. jemalloc
          er kun beregnet på Firefox nettlesermiljøet. For andre
          applikasjoner som bruker JS102, applikasjonen kan krasje siden
          elementer tildelt i jemalloc allokatoren er frigjort på system
          (glibc) allokator.
        
          --disable-debug-symbols:
          Ikke generer feilsøkingssymboler siden de er veldig store og de
          fleste brukere ikke trenger det. Fjern det hvis du vil feilsøke
          JS102.
        
rm -v /usr/lib/libjs_static.ajs: Fjern et stort statisk bibliotek som ikke brukes av noen BLFS pakke.
sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js102-config: Forhindrer js102-config fra å bruke buggy CFLAGS.
          CC=gcc
          CXX=g++
          CXXFLAGS="-msse2
          -mfpmath=sse"