3. Install all needed dependencies and other things necessary for using JHBuild to build GNOME

3.1 Clone inttf modulesets [normal user]

You can of course build original modulesets too, but this will fail and you have to figure out howto fix all errors. I use here currently GNOME 40.3 packages from /pub/GNOME/teams/releng/40.3/ and I have fixed and patched all packages to build and compile now:

cd ~/jhbuild/modulesets

git clone https://[email protected]/inttf/inttf-jhbuild-gnome.git

3.2 Prepare jhbuildrc [normal user]

Copy sample.jhbuildrc

cp ~/jhbuild/examples/sample.jhbuildrc ~/.config/jhbuildrc

Edit ~/.config/jhbuildrc add at least something like:

moduleset = 'inttf-jhbuild-gnome/inttf-gnome-40.3.modules'
modules = ['meta-inttf-gnome']
use_local_modulesets = True

## If you want limit CPU cores add (-j5 means 5 cores are used, default is all cores+1) ##
makeargs = '-j5'
ninjaargs = '-j5'
cmakeargs = '-j5'

3.3 Update apt-file database [root]

JHBuild uses apt-file to find dependencies

apt-file update

3.4 Install needed dependencies to pass JHBuild sysdeps check [root]

This might look ridiculous long list, but actually even this is not enough, this is just a beginning…

apt install libxslt1-dev libxml2-dev libpython3-dev libffi-dev zlib1g-dev \
libgl-dev libxext-dev libxrender-dev libx11-dev libxft-dev libicu-dev libpcre3-dev \
libegl-dev libxcursor-dev libdbus-1-dev libxtst-dev libxi-dev libpng-dev libunistring-dev \
libxkbcommon-x11-dev libxkbcommon-dev libwayland-dev libgraphviz-dev libfontconfig-dev \
libldap2-dev libespeak-dev libsystemd-dev libcanberra-gtk-dev libnss3-dev libfreetype-dev \
libplymouth-dev libarchive-dev libsqlite3-dev libproxy-dev libgnutls28-dev \
libp11-kit-dev uuid-dev liblcms2-dev libusb-1.0-0-dev libxkbfile-dev libmpc-dev libmpfr-dev \
libxrandr-dev libudev-dev libseccomp-dev libexif-dev libx11-xcb-dev libdrm-dev \
libxcomposite-dev libxcb-dri2-0-dev libgbm-dev check libevdev-dev libunwind-dev \
libmtdev-dev libhunspell-dev libavahi-gobject-dev libdbus-glib-1-dev libflac-dev \
libvpx-dev libxinerama-dev libtag1-dev libwavpack-dev libv4l-dev libpulse-dev libgles-dev \
libxdamage-dev libxt-dev libavfilter-dev libavformat-dev libavcodec-dev libavutil-dev \
libcanberra-gtk3-dev libndp-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev \
libdb5.3-dev libcap-dev libegl1-mesa-dev libpwquality-dev libsmbclient-dev libtasn1-6-dev \
libkyotocabinet-dev libanthy-dev libhangul-dev libxklavier-dev libsm-dev xtrans-dev \
liboauth-dev libnspr4-dev libx11-dev libxfixes-dev libxi-dev libstartup-notification0-dev \
libxcb-randr0-dev libxcb-res0-dev libasound2-dev libbluetooth-dev libsbc-dev libfuse-dev \
libbluray-dev libimobiledevice-dev libnfs-dev libplist-dev libudisks2-dev libmagic-dev \
libcdio-paranoia-dev libgphoto2-dev libmtp-dev libdotconf-dev libsndfile1-dev \
libpoppler-glib-dev libexempi-dev nettle-dev nettle-dev libdmapsharing-3.0-dev \
libvorbis-dev libraw-dev valgrind libelf-dev libmusicbrainz5-dev libsane-dev libdvdread-dev \
libusb-1.0-0-dev libvirt-dev libssl-dev libopus-dev libusbredirhost-dev intltool ninja-build \
ragel libcups2-dev doxygen xmlto cargo valac-bin gperf libstemmer-dev libsasl2-dev \
cmake argyll docbook-utils ruby yasm texinfo asciidoc-base help2man libgpgme-dev \
libexpat1-dev libpam0g-dev libyaml-dev libtiff-dev ppp-dev python3-toml python3-typogrify \
libvulkan-dev libhyphen-dev libgcrypt20-dev libwebp-dev libreadline-dev libiw-dev \
libkrb5-dev python3-pip librust-cargo-dev docbook-xsl-ns sqlite3 libnvidia-egl-wayland-dev \
libfuse3-dev libges-1.0-dev zsh sassc highlight spamassassin libgtkspell3-3-dev python-jinja2 \
python3-dbusmock liblua5.3-dev libgfbgraph-0.2-dev libflatpak-dev libefiboot-dev \
libefivar-dev gnutls-bin libtss2-dev mingw-w64-tools gnu-efi libsmbios-dev liblmdb-dev graphviz 

## Ubuntu ##
apt install libportal-dev

3.5 Add llvm repository [root]

## Debian Sid ##
echo 'deb http://apt.llvm.org/unstable/ llvm-toolchain main' > /etc/apt/sources.list.d/llvm.list

## Debian 11 Bullseye ##
echo 'deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye main' > /etc/apt/sources.list.d/llvm.list

## Ubuntu Impish / Hirsute Hippo ##
echo 'deb http://apt.llvm.org/hirsute/ llvm-toolchain-hirsute main' > /etc/apt/sources.list.d/llvm.list

3.6 Download llvm repository gpg key [root]

Note apt-key is deprecated, so I use here trusted.gpg.d instead.

wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key |gpg --dearmor > /etc/apt/trusted.gpg.d/llvm.gpg

3.7 Update APT packages [root]

apt update

3.8 Install needed llvm packages [root]

apt install clang-format clang-tidy clang-tools clang clangd \
libc++-dev libc++1 libc++abi-dev libc++abi1 liblldb-dev libclang-dev \
libclang1 libllvm-ocaml-dev libomp-dev libomp5 lld llvm-dev \
llvm-runtime llvm python-clang liblmdb-dev

3.9 Download unicode.org NamesList.txt and Blocks.txt [root]

mkdir -p /usr/share/unicode

cd /usr/share/unicode

wget https://www.unicode.org/Public/UNIDATA/NamesList.txt https://www.unicode.org/Public/UNIDATA/Blocks.txt

cd ~

3.10 Add experimental repo [root]

## Debian ##
echo "deb http://deb.debian.org/debian/ experimental main" >> /etc/apt/sources.list

## Ubuntu add debian source repo and Debian gpg key ##
echo "deb-src http://deb.debian.org/debian/ experimental main" >> /etc/apt/sources.list.d/debian.list

apt-key --keyring /etc/apt/trusted.gpg.d/debian.gpg adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138

3.11 Update APT packages [root]

apt update

3.12 Install Polkit packages from experimental repository [root]

## Debian ##
apt -t experimental install gir1.2-polkit-1.0 libpolkit-agent-1-dev libpolkit-gobject-1-dev libportal-dev

## Ubuntu ##
apt-get build-dep libpolkit-gobject-1-dev

cd ~
mkdir polkit
cd polkit

apt-get source --compile libpolkit-gobject-1-dev

dpkg -i *.deb

3.13 Install needed Python3 modules [root]

pip3 install -r https://gitlab.gnome.org/GNOME/cantarell-fonts/-/raw/v0.301/requirements.txt

3.14 Check JHBuild sysdeps [normal user]

Run following command and check output. Required packages should be both (none). Optional packages are installed too, but currently too old and will be built later.

jhbuild sysdeps
...
Required packages:
  System installed packages which are too old:
    (none)
  No matching system package installed:
    (none)
Optional packages: (JHBuild will build the missing packages)
  System installed packages which are too old:
    (none)
  No matching system package installed:
    WebKit (webkit2gtk-4.0.pc, required=2.33.2)
    mozjs78 (mozjs-78.pc, required=78.11.0)