From 28cb9bb9b389c1f79187a1c2c44089d0cf77daaa Mon Sep 17 00:00:00 2001 From: "Aaron D. Lee" Date: Sat, 10 Jan 2026 22:30:21 -0500 Subject: [PATCH] RPi: Clone jpeglib from GitHub (PyPI tarball incomplete) The PyPI source tarball is missing both jpeglib's own headers (cjpeglib_common.h, etc.) and libjpeg headers. Clone from GitHub which has the jpeglib headers, then download libjpeg headers. Co-Authored-By: Claude Opus 4.5 --- rpi/setup.sh | 67 ++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/rpi/setup.sh b/rpi/setup.sh index 9e787ba..d4d27ab 100755 --- a/rpi/setup.sh +++ b/rpi/setup.sh @@ -340,46 +340,45 @@ else # Upgrade pip and install build tools pip install --upgrade pip setuptools wheel - # Install jpeglib (has no ARM64 wheel, needs headers fix) + # Install jpeglib (no ARM64 wheel, PyPI tarball missing headers - use GitHub) echo " Installing jpeglib for ARM64..." - if [ -f "$INSTALL_DIR/rpi/patches/jpeglib/install-jpeglib-arm64.sh" ]; then - bash "$INSTALL_DIR/rpi/patches/jpeglib/install-jpeglib-arm64.sh" - else - # Inline fix: download headers and build - JPEGLIB_WORKDIR=$(mktemp -d) - cd "$JPEGLIB_WORKDIR" - pip download jpeglib==1.0.2 --no-binary :all: --no-deps -d . -q - tar -xzf jpeglib-1.0.2.tar.gz - cd jpeglib-1.0.2 - CJPEGLIB="src/jpeglib/cjpeglib" + JPEGLIB_WORKDIR=$(mktemp -d) + cd "$JPEGLIB_WORKDIR" - # Download and copy libjpeg 6b headers - curl -sL "https://www.ijg.org/files/jpegsrc.v6b.tar.gz" | tar -xzf - - cp jpeg-6b/*.h "$CJPEGLIB/6b/" + # Clone from GitHub (PyPI source tarball is missing .h files) + echo " Cloning jpeglib from GitHub..." + git clone --depth 1 --branch v1.0.2 https://github.com/martinbenes1996/jpeglib.git + cd jpeglib + CJPEGLIB="src/jpeglib/cjpeglib" - # Download and copy libjpeg 9f headers (works for 7-9f) - curl -sL "https://www.ijg.org/files/jpegsrc.v9f.tar.gz" | tar -xzf - - for v in 7 8 8a 8b 8c 8d 9 9a 9b 9c 9d 9e 9f; do - cp jpeg-9f/*.h "$CJPEGLIB/$v/" - done + # Download libjpeg headers (not included in repo either) + echo " Downloading libjpeg 6b headers..." + curl -sL "https://www.ijg.org/files/jpegsrc.v6b.tar.gz" | tar -xzf - + cp jpeg-6b/*.h "$CJPEGLIB/6b/" - # Download and copy libjpeg-turbo headers - curl -sL "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.0.tar.gz" | tar -xzf - - for v in turbo120 turbo130 turbo140 turbo150 turbo200 turbo210; do - cp libjpeg-turbo-2.1.0/*.h "$CJPEGLIB/$v/" 2>/dev/null || true - done + echo " Downloading libjpeg 9f headers..." + curl -sL "https://www.ijg.org/files/jpegsrc.v9f.tar.gz" | tar -xzf - + for v in 7 8 8a 8b 8c 8d 9 9a 9b 9c 9d 9e 9f; do + cp jpeg-9f/*.h "$CJPEGLIB/$v/" + done - # Download and copy mozjpeg headers - curl -sL "https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.0.3.tar.gz" | tar -xzf - - for v in mozjpeg101 mozjpeg201 mozjpeg300 mozjpeg403; do - cp mozjpeg-4.0.3/*.h "$CJPEGLIB/$v/" 2>/dev/null || true - done + echo " Downloading libjpeg-turbo headers..." + curl -sL "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.0.tar.gz" | tar -xzf - + for v in turbo120 turbo130 turbo140 turbo150 turbo200 turbo210; do + cp libjpeg-turbo-2.1.0/*.h "$CJPEGLIB/$v/" 2>/dev/null || true + done - # Build and install - pip install . - cd "$INSTALL_DIR" - rm -rf "$JPEGLIB_WORKDIR" - fi + echo " Downloading mozjpeg headers..." + curl -sL "https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.0.3.tar.gz" | tar -xzf - + for v in mozjpeg101 mozjpeg201 mozjpeg300 mozjpeg403; do + cp mozjpeg-4.0.3/*.h "$CJPEGLIB/$v/" 2>/dev/null || true + done + + # Build and install + echo " Building jpeglib (this takes a few minutes)..." + pip install . + cd "$INSTALL_DIR" + rm -rf "$JPEGLIB_WORKDIR" # Install remaining dependencies echo " Installing remaining dependencies..."