From 6d8aa8582f5c312cd5aab396f90904df1ddc0567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 15 Sep 2025 23:43:13 +0200 Subject: [PATCH] Linux: Allow unbundling libjpeg-turbo to use system package --- modules/jpg/SCsub | 182 ++++++++++++++++++------------------ platform/linuxbsd/detect.py | 3 + 2 files changed, 93 insertions(+), 92 deletions(-) diff --git a/modules/jpg/SCsub b/modules/jpg/SCsub index e5b1bc19c0b9..a45b5eff33f1 100644 --- a/modules/jpg/SCsub +++ b/modules/jpg/SCsub @@ -8,98 +8,96 @@ env_jpg = env_modules.Clone() thirdparty_obj = [] -thirdparty_dir = "#thirdparty/libjpeg-turbo" - -thirdparty_sources_common = [ - "jaricom.c", - "jcapimin.c", - "jcarith.c", - "jchuff.c", - "jcicc.c", - "jcinit.c", - "jcmarker.c", - "jcmaster.c", - "jcomapi.c", - "jcparam.c", - "jcphuff.c", - "jctrans.c", - "jdapimin.c", - "jdarith.c", - "jdatadst.c", - "jdatadst-tj.c", - "jdatasrc.c", - "jdatasrc-tj.c", - "jdhuff.c", - "jdicc.c", - "jdinput.c", - "jdmarker.c", - "jdmaster.c", - "jdphuff.c", - "jdtrans.c", - "jerror.c", - "jfdctflt.c", - "jmemmgr.c", - "jmemnobs.c", - "jpeg_nbits.c", - "transupp.c", - "turbojpeg.c", -] - -thirdparty_sources_bit_dependent = [ - "jcapistd.c", - "jccoefct.c", - "jccolor.c", - "jcdctmgr.c", - "jcmainct.c", - "jcprepct.c", - "jcsample.c", - "jdcoefct.c", - "jdcolor.c", - "jdapistd.c", - "jddctmgr.c", - "jdmainct.c", - "jdmerge.c", - "jdpostct.c", - "jdsample.c", - "jfdctfst.c", - "jfdctint.c", - "jidctflt.c", - "jidctfst.c", - "jidctint.c", - "jidctred.c", - "jutils.c", - "jquant1.c", - "jquant2.c", -] - -thirdparty_sources_by_bits = { - 8: list(thirdparty_sources_bit_dependent), - 12: list(thirdparty_sources_bit_dependent), -} - - -def source_paths(files): - return [thirdparty_dir + "/src/" + f for f in files] - - -env_jpg.Prepend(CPPEXTPATH=[thirdparty_dir + "/src"]) - - -def add_bit_depth(bit_depth: int): - env_bit_depth = env_jpg.Clone() - env_bit_depth.disable_warnings() - env_bit_depth["OBJSUFFIX"] = f"_{bit_depth}{env_bit_depth['OBJSUFFIX']}" - env_bit_depth.Append(CPPDEFINES=[f"BITS_IN_JSAMPLE={bit_depth}"]) - env_bit_depth.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_by_bits[bit_depth])) - - -add_bit_depth(8) -add_bit_depth(12) - -env_thirdparty = env_jpg.Clone() -env_thirdparty.disable_warnings() -env_thirdparty.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_common)) -env.modules_sources += thirdparty_obj +if env["builtin_libjpeg_turbo"]: + thirdparty_dir = "#thirdparty/libjpeg-turbo" + + thirdparty_sources_common = [ + "jaricom.c", + "jcapimin.c", + "jcarith.c", + "jchuff.c", + "jcicc.c", + "jcinit.c", + "jcmarker.c", + "jcmaster.c", + "jcomapi.c", + "jcparam.c", + "jcphuff.c", + "jctrans.c", + "jdapimin.c", + "jdarith.c", + "jdatadst.c", + "jdatadst-tj.c", + "jdatasrc.c", + "jdatasrc-tj.c", + "jdhuff.c", + "jdicc.c", + "jdinput.c", + "jdmarker.c", + "jdmaster.c", + "jdphuff.c", + "jdtrans.c", + "jerror.c", + "jfdctflt.c", + "jmemmgr.c", + "jmemnobs.c", + "jpeg_nbits.c", + "transupp.c", + "turbojpeg.c", + ] + + thirdparty_sources_bit_dependent = [ + "jcapistd.c", + "jccoefct.c", + "jccolor.c", + "jcdctmgr.c", + "jcmainct.c", + "jcprepct.c", + "jcsample.c", + "jdcoefct.c", + "jdcolor.c", + "jdapistd.c", + "jddctmgr.c", + "jdmainct.c", + "jdmerge.c", + "jdpostct.c", + "jdsample.c", + "jfdctfst.c", + "jfdctint.c", + "jidctflt.c", + "jidctfst.c", + "jidctint.c", + "jidctred.c", + "jutils.c", + "jquant1.c", + "jquant2.c", + ] + + thirdparty_sources_by_bits = { + 8: list(thirdparty_sources_bit_dependent), + 12: list(thirdparty_sources_bit_dependent), + } + + def source_paths(files): + return [thirdparty_dir + "/src/" + f for f in files] + + env_jpg.Prepend(CPPEXTPATH=[thirdparty_dir + "/src"]) + + def add_bit_depth(bit_depth: int): + env_bit_depth = env_jpg.Clone() + env_bit_depth.disable_warnings() + env_bit_depth["OBJSUFFIX"] = f"_{bit_depth}{env_bit_depth['OBJSUFFIX']}" + env_bit_depth.Append(CPPDEFINES=[f"BITS_IN_JSAMPLE={bit_depth}"]) + env_bit_depth.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_by_bits[bit_depth])) + + add_bit_depth(8) + add_bit_depth(12) + + env_thirdparty = env_jpg.Clone() + env_thirdparty.disable_warnings() + env_thirdparty.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_common)) + env.modules_sources += thirdparty_obj + # Godot source files diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py index df4dbddedd36..fbb3cdf1f13c 100644 --- a/platform/linuxbsd/detect.py +++ b/platform/linuxbsd/detect.py @@ -278,6 +278,9 @@ def configure(env: "SConsEnvironment"): if not env["builtin_libwebp"]: env.ParseConfig("pkg-config libwebp --cflags --libs") + if not env["builtin_libjpeg_turbo"]: + env.ParseConfig("pkg-config libturbojpeg --cflags --libs") + if not env["builtin_mbedtls"]: # mbedTLS only provides a pkgconfig file since 3.6.0, but we still support 2.28.x, # so fallback to manually specifying LIBS if it fails.