Description: use system libjpeg
Author: Gianfranco Costamagna <locutusofborg@debian.org>
Last-Update: 2025-09-16

Index: virtualbox-7.2.2-dfsg/src/libs/Makefile.kmk
===================================================================
--- virtualbox-7.2.2-dfsg.orig/src/libs/Makefile.kmk
+++ virtualbox-7.2.2-dfsg/src/libs/Makefile.kmk
@@ -69,7 +69,8 @@ endif
 if   (defined(VBOX_WITH_VRDP) || defined(VBOX_WITH_USB_VIDEO_IMPL)) \
   && !defined(VBOX_ONLY_ADDITIONS) \
   && !defined(VBOX_ONLY_SDK) \
-  && !defined(VBOX_ONLY_VALIDATIONKIT)
+  && !defined(VBOX_ONLY_VALIDATIONKIT) \
+  && ("$(SDK_VBoxJpeg_INCS)" == "$(SDK_VBoxLibJpeg_DEFAULT_INCS)")
  include $(PATH_SUB_CURRENT)/libjpeg-turbo-3.1.0/Makefile.kmk
 endif
 
Index: virtualbox-7.2.2-dfsg/Config.kmk
===================================================================
--- virtualbox-7.2.2-dfsg.orig/Config.kmk
+++ virtualbox-7.2.2-dfsg/Config.kmk
@@ -3180,9 +3180,6 @@ VBOX_PATH_X11_ROOT      = $(PATH_ROOT)/s
 # Miscellaneous includes
 #
 VBOX_GRAPHICS_INCS = $(PATH_ROOT)/include/VBox/Graphics
-VBOX_JPEG_INCS     = \
-	$(PATH_ROOT)/src/libs/libjpeg-turbo-3.1.0/src \
-	$(PATH_ROOT)/src/libs/libjpeg-turbo-3.1.0
 
 
 # The icons to use.
@@ -5285,6 +5282,16 @@ SDK_VBoxLibXml2_DEFS.win      ?= WIN32 _
 # Note: no linking to LIB here, we do that explicitly in src/VBox/Runtime/Makefile.kmk to link
 #       libxml against VBoxRT
 
+# libjpeg
+SDK_VBoxLibJpeg              := libjpeg for dll linking.
+SDK_VBoxLibJpeg_DEFAULT_INCS ?= $(PATH_ROOT)/src/libs/libjpeg-turbo-3.1.0/src \
+        $(PATH_ROOT)/src/libs/libjpeg-turbo-3.1.0
+SDK_VBoxLibJpeg_INCS         ?= $(SDK_VBoxLibJpeg_DEFAULT_INCS)
+SDK_VBoxLibJpeg_LIBS         ?=  $(PATH_STAGE_LIB)/VBox-libjpeg$(VBOX_SUFF_LIB) \
+        $(PATH_STAGE_LIB)/VBox-libjpeg12$(VBOX_SUFF_LIB) \
+        $(PATH_STAGE_LIB)/VBox-libjpeg16$(VBOX_SUFF_LIB)
+
+
 # zlib
 SDK_VBoxZlib                  := zlib for dll linking.
 if1of ($(KBUILD_TARGET), os2 solaris win)
Index: virtualbox-7.2.2-dfsg/configure
===================================================================
--- virtualbox-7.2.2-dfsg.orig/configure
+++ virtualbox-7.2.2-dfsg/configure
@@ -110,11 +110,13 @@ WITH_LIBOGG=0
 WITH_LIBVORBIS=0
 WITH_LIBTPMS=1
 WITH_LIBLZMA=1
+WITH_LIBJPEG=1
 BUILD_LIBXML2=
 BUILD_LIBCURL=
 BUILD_LIBSSL=
 BUILD_LIBVPX=
 BUILD_LIBTPMS=
+BUILD_LIBJPEG=
 if [ "$OS" = "darwin" ]; then # Do not use the /opt/local version of this! We end up using the wrong iconv.h then.
     BUILD_LIBLZMA=1
 else
@@ -1904,6 +1906,46 @@ EOF
   fi
 }
 
+#
+# Check for libjpeg
+#
+check_libjpeg()
+{
+  if [ -z "$BUILD_LIBJPEG" ]; then
+    test_header libjpeg
+    if which_wrapper pkg-config > /dev/null; then
+      libjpeg_ver=`pkg-config libjpeg --modversion 2>> $LOG`
+      if [ $? -eq 0 ]; then
+        FLGJPEG=`pkg-config libjpeg --cflags`
+        INCJPEG=`strip_I "$FLGJPEG"`
+        LIBJPEG=`pkg-config libjpeg --libs`
+      fi
+      cat > $ODIR.tmp_src.cc << EOF
+#include <cstddef>
+#include <cstdio>
+#include <jpeglib.h>
+extern "C" int main(void)
+{
+#ifndef JPEG_LIB_VERSION
+#error JPEG_LIB_VERSION not defined
+#endif
+  printf("found, OK.\n");
+  return 0;
+}
+EOF
+      [ -n "$INCJPEG" ] && I_INCJPEG=`prefix_I "$INCJPEG"`
+      if test_compile "$LIBJPEG $I_INCJPEG" libjpeg libjpeg nofatal; then
+        if test_execute; then
+          cnf_append "SDK_VBoxLibJpeg_INCS" "$INCJPEG"
+          cnf_append "SDK_VBoxLibJpeg_LIBS" "`strip_l "$LIBJPEG"`"
+        fi
+      else
+        echo "not found -- building libjpeg from in-tree code."
+      fi
+    fi
+  fi
+}
+
 
 #
 # Check whether static libstdc++ is installed. This library is required
@@ -2471,8 +2513,9 @@ EOF
 [ $OSE          -eq 0 ] && echo "  --disable-extpack        don't build the extpack"
 [ $WITH_DOCS    -eq 1 ] && echo "  --disable-docs           don't build the documentation"
 [ $WITH_LIBVPX  -eq 1 ] && echo "  --disable-libvpx         don't use libvpx for video capturing"
-[ $WITH_LIBVORBIS -eq 0 ] && echo "  --enable-libvorbis       enable system libvorbis"
+[ $WITH_LIBVORBIS -eq 0 ] && echo "  --enable-libvorbis     enable system libvorbis"
 [ $WITH_LIBOGG -eq 0 ]  && echo "  --enable-libogg          enable system libogg"
+[ $WITH_LIBJPEG -eq 0 ]  && echo "  --enable-libjpeg        enable system libjpeg"
 [ $WITH_LIBTPMS -eq 1 ] && echo "  --disable-libtpms        don't use libtpms for TPM emulation"
 [ $WITH_LIBLZMA -eq 1 ] && echo "  --disable-liblzma        don't use liblzma"
 [ "$OS" = "linux" -o "$OS" = "freebsd" ] && echo "  --enable-vde             enable VDE networking"
@@ -2723,6 +2766,9 @@ for option in "$@"; do
     --enable-libogg)
       WITH_LIBOGG=1
       ;;
+    --enable-libjpeg)
+      WITH_LIBJPEG=1
+      ;;
     --enable-libvorbis)
       WITH_LIBVORBIS=1
       ;;
@@ -2929,6 +2975,10 @@ if [ $WITH_LIBOGG -eq 0 -o $WITH_LIBVORB
   cnf_append "VBOX_WITH_AUDIO_RECORDING" ""
 fi
 
+if [ $WITH_LIBJPEG -eq 0 ]; then
+  cnf_append "VBOX_WITH_LIBJPEG" ""
+fi
+
 # Darwin-specific
 [ "$OS" = "darwin" ] && check_darwinversion
 # the tools
@@ -2953,6 +3003,7 @@ if [ $ONLY_ADDITIONS -eq 0 ]; then
   [ $WITH_LIBVORBIS -eq 1 ] && check_libvorbis
   [ $WITH_LIBTPMS -eq 1 ] && check_libtpms
   [ $WITH_LIBLZMA -eq 1 ] && check_liblzma
+  [ $WITH_LIBJPEG -eq 1 ] && check_libjpeg
   [ "$OS" != "darwin"  ] && check_png
   [ $OSE -eq 0 -a "$OS" = "linux" ] && check_pam
   if [ $WITH_SDL -eq 1 ]; then
Index: virtualbox-7.2.2-dfsg/src/VBox/Devices/Makefile.kmk
===================================================================
--- virtualbox-7.2.2-dfsg.orig/src/VBox/Devices/Makefile.kmk
+++ virtualbox-7.2.2-dfsg/src/VBox/Devices/Makefile.kmk
@@ -508,7 +508,7 @@ if !defined(VBOX_ONLY_EXTPACKS) && "$(in
   if defined(VBOX_WITH_USB_VIDEO_IMPL)
    VBoxDD_DEFS          += VBOX_WITH_USB_VIDEO_IMPL
    VBoxDD_INCS += \
-   	$(VBOX_JPEG_INCS)
+   	$(SDK_VBoxLibJpeg_INCS)
    VBoxDD_SOURCES       += \
    	Video/UsbWebcam.cpp \
    	Video/UsbWebcamDesc.cpp \
@@ -524,9 +524,7 @@ if !defined(VBOX_ONLY_EXTPACKS) && "$(in
    VBoxDD_SOURCES.win += \
    	Video/HostWebcam-win.cpp
    VBoxDD_LIBS += \
-   	$(PATH_STAGE_LIB)/VBox-libjpeg$(VBOX_SUFF_LIB) \
-   	$(PATH_STAGE_LIB)/VBox-libjpeg12$(VBOX_SUFF_LIB) \
-   	$(PATH_STAGE_LIB)/VBox-libjpeg16$(VBOX_SUFF_LIB)
+   	$(SDK_VBoxLibJpeg_LIBS)
    VBoxDD_LIBS.win += \
    	strmiids.lib
    VBoxDD_LDFLAGS.darwin += \
