From 6e2785ad73ec7241054d0bce1e7d3a1dd4bd848a Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Wed, 25 Dec 2024 14:54:44 -0700 Subject: [PATCH] Devcontainer: Split ladybird feature into install scripts per distro We'll add more distros in a future commit. --- .../ladybird/devcontainer-feature.json | 11 ++++ .../features/ladybird/install-ubuntu.sh | 48 +++++++++++++++++ .devcontainer/features/ladybird/install.sh | 52 +++---------------- 3 files changed, 65 insertions(+), 46 deletions(-) create mode 100644 .devcontainer/features/ladybird/install-ubuntu.sh diff --git a/.devcontainer/features/ladybird/devcontainer-feature.json b/.devcontainer/features/ladybird/devcontainer-feature.json index 63cffd26c13..c5904dfadbd 100644 --- a/.devcontainer/features/ladybird/devcontainer-feature.json +++ b/.devcontainer/features/ladybird/devcontainer-feature.json @@ -4,6 +4,17 @@ "version": "2.0.1", "description": "Enable development of Ladybird libraries and applications", "options": { + "distro": { + "type": "string", + "proposals": [ + "ubuntu", + "fedora", + "arch", + "alpine" + ], + "default": "ubuntu", + "description": "Select the base distribution for the container" + }, "llvm_version": { "type": "string", "proposals": [ diff --git a/.devcontainer/features/ladybird/install-ubuntu.sh b/.devcontainer/features/ladybird/install-ubuntu.sh new file mode 100644 index 00000000000..fa02f18e069 --- /dev/null +++ b/.devcontainer/features/ladybird/install-ubuntu.sh @@ -0,0 +1,48 @@ +#!/bin/sh +set -e + +### Check distro +if [ ! -f /etc/lsb-release ]; then + echo "SCRIPT ERROR: Not an Ubuntu container" + exit 1 +fi + +# shellcheck source=/dev/null +. /etc/lsb-release + +### Declare helper functions + +install_llvm_key() { + wget -O /usr/share/keyrings/llvm-snapshot.gpg.key https://apt.llvm.org/llvm-snapshot.gpg.key + echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME} main" | tee -a /etc/apt/sources.list.d/llvm.list + if [ ! "${LLVM_VERSION}" = "trunk" ]; then + echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME}-${LLVM_VERSION} main" | tee -a /etc/apt/sources.list.d/llvm.list + fi + apt update -y +} + +### Install packages + +apt update -y +apt install -y lsb-release git python3 autoconf autoconf-archive automake build-essential cmake libgl1-mesa-dev nasm ninja-build pkg-config qt6-base-dev qt6-tools-dev-tools qt6-multimedia-dev qt6-wayland ccache fonts-liberation2 zip unzip curl tar +### Ensure new enough host compiler is available + +VERSION="0.0.0" +if command -v clang >/dev/null 2>&1; then + VERSION="$(clang -dumpversion)" +fi +MAJOR_VERSION="${VERSION%%.*}" + +if [ "${LLVM_VERSION}" = "trunk" ]; then + install_llvm_key + + apt install -y llvm clang clangd clang-tools lld lldb clang-tidy clang-format +elif [ "${MAJOR_VERSION}" -lt "${LLVM_VERSION}" ]; then + FAILED_INSTALL=0 + apt install -y "llvm-${LLVM_VERSION}" "clang-${LLVM_VERSION}" "clangd-${LLVM_VERSION}" "clang-tools-${LLVM_VERSION}" "lld-${LLVM_VERSION}" "lldb-${LLVM_VERSION}" "clang-tidy-${LLVM_VERSION}" "clang-format-${LLVM_VERSION}" || FAILED_INSTALL=1 + + if [ "${FAILED_INSTALL}" -ne 0 ]; then + install_llvm_key + apt install -y "llvm-${LLVM_VERSION}" "clang-${LLVM_VERSION}" "clangd-${LLVM_VERSION}" "clang-tools-${LLVM_VERSION}" "lld-${LLVM_VERSION}" "lldb-${LLVM_VERSION}" "clang-tidy-${LLVM_VERSION}" "clang-format-${LLVM_VERSION}" + fi +fi diff --git a/.devcontainer/features/ladybird/install.sh b/.devcontainer/features/ladybird/install.sh index 860b04d2aa1..ec2ed2fe9d6 100755 --- a/.devcontainer/features/ladybird/install.sh +++ b/.devcontainer/features/ladybird/install.sh @@ -1,52 +1,12 @@ -#!/bin/sh +#!/usr/bin/env bash set -e # Feature options +export LLVM_VERSION=${LLVM_VERSION:-19} +DISTRO=${DISTRO:-ubuntu} -LLVM_VERSION=${LLVM_VERSION:-19} -### Check distro - -if [ ! -f /etc/lsb-release ]; then - echo "Not an Ubuntu container, add logic for your distro to the serenity feature or use Ubuntu" - exit 1 -fi +# call distro-specific script that lives in this directory +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # shellcheck source=/dev/null -. /etc/lsb-release - -### Declare helper functions - -install_llvm_key() { - wget -O /usr/share/keyrings/llvm-snapshot.gpg.key https://apt.llvm.org/llvm-snapshot.gpg.key - echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME} main" | tee -a /etc/apt/sources.list.d/llvm.list - if [ ! "${LLVM_VERSION}" = "trunk" ]; then - echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME}-${LLVM_VERSION} main" | tee -a /etc/apt/sources.list.d/llvm.list - fi - apt update -y -} - -### Install packages - -apt update -y -apt install -y lsb-release git python3 autoconf autoconf-archive automake build-essential cmake libgl1-mesa-dev nasm ninja-build pkg-config qt6-base-dev qt6-tools-dev-tools qt6-multimedia-dev qt6-wayland ccache fonts-liberation2 zip unzip curl tar -### Ensure new enough host compiler is available - -VERSION="0.0.0" -if command -v clang >/dev/null 2>&1; then - VERSION="$(clang -dumpversion)" -fi -MAJOR_VERSION="${VERSION%%.*}" - -if [ "${LLVM_VERSION}" = "trunk" ]; then - install_llvm_key - - apt install -y llvm clang clangd clang-tools lld lldb clang-tidy clang-format -elif [ "${MAJOR_VERSION}" -lt "${LLVM_VERSION}" ]; then - FAILED_INSTALL=0 - apt install -y "llvm-${LLVM_VERSION}" "clang-${LLVM_VERSION}" "clangd-${LLVM_VERSION}" "clang-tools-${LLVM_VERSION}" "lld-${LLVM_VERSION}" "lldb-${LLVM_VERSION}" "clang-tidy-${LLVM_VERSION}" "clang-format-${LLVM_VERSION}" || FAILED_INSTALL=1 - - if [ "${FAILED_INSTALL}" -ne 0 ]; then - install_llvm_key - apt install -y "llvm-${LLVM_VERSION}" "clang-${LLVM_VERSION}" "clangd-${LLVM_VERSION}" "clang-tools-${LLVM_VERSION}" "lld-${LLVM_VERSION}" "lldb-${LLVM_VERSION}" "clang-tidy-${LLVM_VERSION}" "clang-format-${LLVM_VERSION}" - fi -fi +. "${DIR}/install-${DISTRO}.sh"