diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index cc0f6b025..cecd43ad3 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -35,21 +35,20 @@ jobs: echo "Running apt update." sudo apt update echo "Installing dependencies with apt." - DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexpat1-dev libbrotli-dev zlib1g-dev libinih-dev adwaita-icon-theme-full libtcmalloc-minimal4 + DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexpat1-dev libbrotli-dev zlib1g-dev libinih-dev adwaita-icon-theme-full gettext libarchive-tools zstd libgif-dev libwebp-dev libwebpdemux2 + + - name: Install makedeb + run: | + echo "Installing makedeb..." + curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o makedeb.deb \ + "https://github.com/makedeb/makedeb/releases/download/v16.1.0-beta1/makedeb-beta_16.1.0-beta1_amd64_focal.deb" + DEBIAN_FRONTEND=noninteractive sudo dpkg -i makedeb.deb - name: Install libjxl + working-directory: tools/makedeb run: | - echo "Downloading and installing libhwy and libjxl..." - VERSION_UBUNTU=20.04 - VERSION_JXL=0.10.2 - DEB_URL_HWYDEV="https://launchpad.net/~ubuntuhandbook1/+archive/ubuntu/apps/+files/libhwy-dev_0.16.0-0focal1_amd64.deb" - DEB_URL_HWY="https://launchpad.net/~ubuntuhandbook1/+archive/ubuntu/apps/+files/libhwy0_0.16.0-0focal1_amd64.deb" - curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o libhwy-dev.deb "$DEB_URL_HWYDEV" - curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o libhwy.deb "$DEB_URL_HWY" - curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o libjxl-debs.tar.gz \ - "https://github.com/libjxl/libjxl/releases/download/v${VERSION_JXL}/jxl-debs-amd64-ubuntu-${VERSION_UBUNTU}-v${VERSION_JXL}.tar.gz" - tar xf libjxl-debs.tar.gz - DEBIAN_FRONTEND=noninteractive sudo dpkg -i libhwy-dev.deb libhwy.deb jxl_${VERSION_JXL}_amd64.deb libjxl-dev_${VERSION_JXL}_amd64.deb libjxl_${VERSION_JXL}_amd64.deb + echo "Building and installing libjxl..." + makedeb -si --no-confirm -p PKGBUILD.libjxl - name: Install Exiv2 run: | diff --git a/tools/makedeb/PKGBUILD.libjxl b/tools/makedeb/PKGBUILD.libjxl new file mode 100644 index 000000000..b63801812 --- /dev/null +++ b/tools/makedeb/PKGBUILD.libjxl @@ -0,0 +1,41 @@ +# Maintainer: RawTherapee Developers + +_pkgname="libjxl" +pkgname="$_pkgname" +pkgver='0.10.2' +pkgrel='1' +pkgdesc='JPEG XL image format reference implementation' +url='https://github.com/libjxl/libjxl' +license=('BSD') +arch=('amd64') + +depends=('libgif-dev' 'libjpeg-dev' 'libopenexr-dev' 'libpng-dev' 'libwebp-dev') +makedepends=('cmake' 'pkg-config' 'libbrotli-dev' 'libgflags-dev') + +_pkgsrc="$_pkgname" +source=("git+$url.git#tag=v$pkgver") +sha256sums=('SKIP') + +prepare() { + cd "$_pkgsrc" + git submodule update --init --recursive --depth 1 --recommend-shallow +} + +build() { + local _cmake_options=( + -B build + -S "$_pkgsrc" + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX='/usr' + -DJPEGXL_FORCE_SYSTEM_BROTLI=ON + -DBUILD_TESTING=OFF + -Wno-dev + ) + + cmake "${_cmake_options[@]}" + cmake --build build --parallel +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} diff --git a/tools/makedeb/install.sh b/tools/makedeb/install.sh new file mode 100644 index 000000000..409c0f5a1 --- /dev/null +++ b/tools/makedeb/install.sh @@ -0,0 +1,135 @@ +#!/usr/bin/env bash +# The installation script for makedeb. This is the script that's shown and gets ran from https://makedeb.org. +set -e + +# Handy env vars. +MAKEDEB_RELEASE="${MAKEDEB_RELEASE:-}" +makedeb_url='makedeb.org' +color_normal="$(tput sgr0)" +color_bold="$(tput bold)" +color_green="$(tput setaf 77)" +color_orange="$(tput setaf 214)" +color_blue="$(tput setaf 14)" +color_red="$(tput setaf 202)" +color_purple="$(tput setaf 135)" +noninteractive_mode=0 +apt_args=() + +# Handy functions. +msg() { + echo "${color_blue}[>]${color_normal} ${1}" +} + +error() { + echo "${color_red}[!]${color_normal} ${1}" +} + +question() { + echo "${color_purple}[?]${color_normal} ${1}" +} + +die_cmd() { + error "${1}" + exit 1 +} + +answered_yes() { + if [[ "${1}" == "" || "${1,,}" == "y" ]]; then + return 0 + else + return 1 + fi +} + +# Pre-checks. +if [[ "${UID}" == "0" ]]; then + die_cmd "This script is not allowed to be run under the root user. Please run as a normal user and try again." +fi + +# Program start. +echo "-------------------------" +echo "${color_green}[#]${color_normal} ${color_orange}makedeb Installer${color_normal} ${color_green}[#]${color_normal}" +echo "-------------------------" +echo + +if ! echo "${-}" | grep -q i; then + msg "Running in noninteractive mode." + noninteractive_mode=1 + export DEBIAN_FRONTEND=noninteractive + apt_args+=('-y') +fi + +msg "Ensuring needed packages are installed..." +if ! sudo apt-get update "${apt_args[@]}"; then + die_cmd "Failed to update APT cache." +fi + +missing_dependencies=() +dpkg-query -W 'wget' > /dev/null 2>&1 || missing_dependencies+=('wget') +dpkg-query -W 'gpg' > /dev/null 2>&1 || missing_dependencies+=('gpg') + +if ! ( test -z "${missing_dependencies[*]}" || sudo apt-get install "${apt_args[@]}" --mark-auto "${missing_dependencies[@]}" ); then + die_cmd "Failed to install needed packages." +fi + +echo + +if (( "${noninteractive_mode}" )) && [[ "${MAKEDEB_RELEASE:+x}" == '' ]]; then + error "The script was ran in noninteractive mode, but no makedeb package was specified to install." + error "Please specify a package to install via the 'MAKEDEB_RELEASE' environment variable." + die_cmd "Available packages are 'makedeb', 'makedeb-beta', and 'makedeb-alpha'." +elif [[ "${MAKEDEB_RELEASE:+x}" == '' ]]; then + msg "Multiple releases of makedeb are available for installation." + msg "Currently, you can install one of 'makedeb', 'makedeb-beta', or" + msg "'makedeb-alpha'." + + while true; do + read -p "$(question "Which release would you like? ")" MAKEDEB_RELEASE + + if ! echo "${MAKEDEB_RELEASE}" | grep -qE '^makedeb$|^makedeb-beta$|^makedeb-alpha$'; then + error "Invalid response: ${MAKEDEB_RELEASE}" + continue + fi + + break + done + + echo +fi + +case "${MAKEDEB_RELEASE}" in + makedeb|makedeb-alpha|makedeb-beta) + ;; + *) + echo + error "Invalid \$MAKEDEB_RELEASE: '${MAKEDEB_RELEASE}'" + exit 1 ;; +esac + +msg "Setting up makedeb APT repository..." +if ! wget -qO - "https://proget.${makedeb_url}/debian-feeds/makedeb.pub" | gpg --dearmor | sudo tee /usr/share/keyrings/makedeb-archive-keyring.gpg 1> /dev/null; then + die_cmd "Failed to set up makedeb APT repository." +fi +echo "deb [signed-by=/usr/share/keyrings/makedeb-archive-keyring.gpg arch=all] https://proget.${makedeb_url} makedeb main" | sudo tee /etc/apt/sources.list.d/makedeb.list 1> /dev/null + +msg "Updating APT cache..." +if ! sudo apt-get update "${apt_args[@]}"; then + die_cmd "Failed to update APT cache." +fi + +echo +msg "Installing '${MAKEDEB_RELEASE}'..." +if ! sudo apt-get install "${apt_args[@]}" -- "${MAKEDEB_RELEASE}"; then + die_cmd "Failed to install package." +fi + +msg "Finished! If you need help of any kind, feel free to reach out:" +echo +msg "${color_bold}makedeb Homepage:${color_normal} https://${makedeb_url}" +msg "${color_bold}makedeb Package Repository:${color_normal} https://mpr.${makedeb_url}" +msg "${color_bold}makedeb Documentation:${color_normal} https://docs.${makedeb_url}" +msg "${color_bold}makedeb Support:${color_normal} https://docs.${makedeb_url}/support/obtaining-support" +echo +msg "Enjoy makedeb!" + +# vim: set sw=4 expandtab: