Use makedeb to build libjxl from source

This commit is contained in:
xiota 2024-04-14 06:14:20 +00:00
parent 775f7cbd03
commit bde73f5ce1
3 changed files with 187 additions and 12 deletions

View File

@ -35,21 +35,20 @@ jobs:
echo "Running apt update." echo "Running apt update."
sudo apt update sudo apt update
echo "Installing dependencies with apt." 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 - name: Install libjxl
working-directory: tools/makedeb
run: | run: |
echo "Downloading and installing libhwy and libjxl..." echo "Building and installing libjxl..."
VERSION_UBUNTU=20.04 makedeb -si --no-confirm -p PKGBUILD.libjxl
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
- name: Install Exiv2 - name: Install Exiv2
run: | run: |

View File

@ -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
}

135
tools/makedeb/install.sh Normal file
View File

@ -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: