SDL_image: Added JXL support on Apple platforms

From 3e641201780987f3acc9cb403234f97121796c58 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sun, 8 May 2022 21:36:16 -0700
Subject: [PATCH] Added JXL support on Apple platforms

---
 IMG_jxl.c                                     |   3 +-
 Xcode/SDL_image.xcodeproj/project.pbxproj     |  40 +
 Xcode/jxl/jxl.xcodeproj/project.pbxproj       | 769 ++++++++++++++++++
 Xcode/jxl/jxl/jxl_export.h                    |  42 +
 .../showimage.xcodeproj/project.pbxproj       |  34 +
 5 files changed, 887 insertions(+), 1 deletion(-)
 create mode 100644 Xcode/jxl/jxl.xcodeproj/project.pbxproj
 create mode 100644 Xcode/jxl/jxl/jxl_export.h

diff --git a/IMG_jxl.c b/IMG_jxl.c
index 6543421..393fceb 100644
--- a/IMG_jxl.c
+++ b/IMG_jxl.c
@@ -47,7 +47,8 @@ static struct {
     if (lib.FUNC == NULL) { SDL_UnloadObject(lib.handle); return -1; }
 #else
 #define FUNCTION_LOADER(FUNC, SIG) \
-    lib.FUNC = FUNC;
+    lib.FUNC = FUNC; \
+    if (lib.FUNC == NULL) { IMG_SetError("Missing jxl.framework"); return -1; }
 #endif
 
 int IMG_InitJXL()
diff --git a/Xcode/SDL_image.xcodeproj/project.pbxproj b/Xcode/SDL_image.xcodeproj/project.pbxproj
index eb5fd99..d1d8df9 100644
--- a/Xcode/SDL_image.xcodeproj/project.pbxproj
+++ b/Xcode/SDL_image.xcodeproj/project.pbxproj
@@ -139,6 +139,8 @@
 		F307EEBC28282912003915D7 /* jidctfst.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EEB728282912003915D7 /* jidctfst.c */; };
 		F307EEBD28282912003915D7 /* jmemansi.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EEB828282912003915D7 /* jmemansi.c */; };
 		F307EEBE28282912003915D7 /* jmemansi.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EEB828282912003915D7 /* jmemansi.c */; };
+		F354743E2828CA66007E9EDA /* IMG_jxl.c in Sources */ = {isa = PBXBuildFile; fileRef = F354743B2828CA66007E9EDA /* IMG_jxl.c */; };
+		F354743F2828CA66007E9EDA /* IMG_jxl.c in Sources */ = {isa = PBXBuildFile; fileRef = F354743B2828CA66007E9EDA /* IMG_jxl.c */; };
 		F3D87C04281DF8FC005DA540 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87C03281DF8FC005DA540 /* SDL2.framework */; };
 		F3E1AAEB281CBABD00740E39 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3E1AAEA281CBABD00740E39 /* CoreGraphics.framework */; platformFilters = (ios, tvos, ); };
 		F3E1AAEC281CBB1F00740E39 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3E1AAE8281CBA7B00740E39 /* ImageIO.framework */; platformFilters = (ios, tvos, ); };
@@ -154,6 +156,13 @@
 			remoteGlobalIDString = BE1FA71807AF4C44004B6283;
 			remoteInfo = Framework;
 		};
+		F307EFAC2828C8FA003915D7 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F307EFA82828C8FA003915D7 /* jxl.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F307EEDC28288CCF003915D7;
+			remoteInfo = jxl;
+		};
 		F3D87D23281EA9D8005DA540 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = F3D87D15281EA88F005DA540 /* webp.xcodeproj */;
@@ -248,6 +257,8 @@
 		F307EEB528282912003915D7 /* jidctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = ../external/jpeg/jidctint.c; sourceTree = "<group>"; };
 		F307EEB728282912003915D7 /* jidctfst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctfst.c; path = ../external/jpeg/jidctfst.c; sourceTree = "<group>"; };
 		F307EEB828282912003915D7 /* jmemansi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jmemansi.c; path = ../external/jpeg/jmemansi.c; sourceTree = "<group>"; };
+		F307EFA82828C8FA003915D7 /* jxl.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jxl.xcodeproj; path = jxl/jxl.xcodeproj; sourceTree = "<group>"; };
+		F354743B2828CA66007E9EDA /* IMG_jxl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IMG_jxl.c; path = ../IMG_jxl.c; sourceTree = "<group>"; };
 		F3D87C03281DF8FC005DA540 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = macOS/SDL2.framework; sourceTree = "<group>"; };
 		F3D87D15281EA88F005DA540 /* webp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = webp.xcodeproj; path = webp/webp.xcodeproj; sourceTree = "<group>"; };
 		F3E1AAE8281CBA7B00740E39 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
@@ -307,6 +318,7 @@
 		0867D691FE84028FC02AAC07 /* SDL_imageFramework */ = {
 			isa = PBXGroup;
 			children = (
+				F307EFA82828C8FA003915D7 /* jxl.xcodeproj */,
 				F3D87D15281EA88F005DA540 /* webp.xcodeproj */,
 				F59C70FC00D5CB5801000001 /* pkg-support */,
 				0153844A006D81B07F000001 /* Public Headers */,
@@ -334,6 +346,7 @@
 				AA579DE2161C07E6005F809B /* IMG_bmp.c */,
 				AA579DE3161C07E6005F809B /* IMG_gif.c */,
 				AA579DE5161C07E6005F809B /* IMG_jpg.c */,
+				F354743B2828CA66007E9EDA /* IMG_jxl.c */,
 				AA579DE6161C07E6005F809B /* IMG_lbm.c */,
 				AA579DE7161C07E6005F809B /* IMG_pcx.c */,
 				AA579DE8161C07E6005F809B /* IMG_png.c */,
@@ -426,6 +439,14 @@
 			name = jpeg;
 			sourceTree = "<group>";
 		};
+		F307EFA92828C8FA003915D7 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F307EFAD2828C8FA003915D7 /* jxl.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 		F3D87D16281EA88F005DA540 /* Products */ = {
 			isa = PBXGroup;
 			children = (
@@ -554,6 +575,10 @@
 			productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
 			projectDirPath = "";
 			projectReferences = (
+				{
+					ProductGroup = F307EFA92828C8FA003915D7 /* Products */;
+					ProjectRef = F307EFA82828C8FA003915D7 /* jxl.xcodeproj */;
+				},
 				{
 					ProductGroup = F3D87D16281EA88F005DA540 /* Products */;
 					ProjectRef = F3D87D15281EA88F005DA540 /* webp.xcodeproj */;
@@ -569,6 +594,13 @@
 /* End PBXProject section */
 
 /* Begin PBXReferenceProxy section */
+		F307EFAD2828C8FA003915D7 /* jxl.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = jxl.framework;
+			remoteRef = F307EFAC2828C8FA003915D7 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 		F3D87D24281EA9D8005DA540 /* webp.framework */ = {
 			isa = PBXReferenceProxy;
 			fileType = wrapper.framework;
@@ -685,6 +717,7 @@
 				F307EE3B2828264D003915D7 /* jccolor.c in Sources */,
 				F307EEBD28282912003915D7 /* jmemansi.c in Sources */,
 				F307EE9A282826FC003915D7 /* jdarith.c in Sources */,
+				F354743E2828CA66007E9EDA /* IMG_jxl.c in Sources */,
 				AA579E0C161C07E7005F809B /* IMG_xv.c in Sources */,
 				F307EE80282826FC003915D7 /* jerror.c in Sources */,
 				F307EE8A282826FC003915D7 /* jdcolor.c in Sources */,
@@ -756,6 +789,7 @@
 				F307EE3C2828264D003915D7 /* jccolor.c in Sources */,
 				F307EEBE28282912003915D7 /* jmemansi.c in Sources */,
 				F307EE9B282826FC003915D7 /* jdarith.c in Sources */,
+				F354743F2828CA66007E9EDA /* IMG_jxl.c in Sources */,
 				AA579E0D161C07E7005F809B /* IMG_xv.c in Sources */,
 				F307EE81282826FC003915D7 /* jerror.c in Sources */,
 				F307EE8B282826FC003915D7 /* jdcolor.c in Sources */,
@@ -800,6 +834,7 @@
 					LOAD_BMP,
 					LOAD_GIF,
 					LOAD_JPG,
+					LOAD_JXL,
 					LOAD_LBM,
 					LOAD_PCX,
 					LOAD_PNG,
@@ -842,6 +877,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				OTHER_LDFLAGS = (
+					"-weak_framework",
+					jxl,
 					"-weak_framework",
 					webp,
 				);
@@ -889,6 +926,7 @@
 					LOAD_BMP,
 					LOAD_GIF,
 					LOAD_JPG,
+					LOAD_JXL,
 					LOAD_LBM,
 					LOAD_PCX,
 					LOAD_PNG,
@@ -930,6 +968,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				OTHER_LDFLAGS = (
+					"-weak_framework",
+					jxl,
 					"-weak_framework",
 					webp,
 				);
diff --git a/Xcode/jxl/jxl.xcodeproj/project.pbxproj b/Xcode/jxl/jxl.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..36354bb
--- /dev/null
+++ b/Xcode/jxl/jxl.xcodeproj/project.pbxproj
@@ -0,0 +1,769 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 55;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		F307EF0228289000003915D7 /* coeff_order.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEE928289000003915D7 /* coeff_order.cc */; };
+		F307EF0328289000003915D7 /* dec_patch_dictionary.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEEA28289000003915D7 /* dec_patch_dictionary.cc */; };
+		F307EF0428289000003915D7 /* compressed_dc.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEEB28289000003915D7 /* compressed_dc.cc */; };
+		F307EF0528289000003915D7 /* dec_reconstruct.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEEC28289000003915D7 /* dec_reconstruct.cc */; };
+		F307EF0628289000003915D7 /* dec_frame.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEED28289000003915D7 /* dec_frame.cc */; };
+		F307EF0728289000003915D7 /* ac_strategy.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEEE28289000003915D7 /* ac_strategy.cc */; };
+		F307EF0828289000003915D7 /* dec_noise.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEEF28289000003915D7 /* dec_noise.cc */; };
+		F307EF0928289000003915D7 /* dec_external_image.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF028289000003915D7 /* dec_external_image.cc */; };
+		F307EF0A28289000003915D7 /* dct_scales.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF128289000003915D7 /* dct_scales.cc */; };
+		F307EF0B28289000003915D7 /* dec_huffman.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF228289000003915D7 /* dec_huffman.cc */; };
+		F307EF0C28289000003915D7 /* dec_ans.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF328289000003915D7 /* dec_ans.cc */; };
+		F307EF0D28289000003915D7 /* blending.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF428289000003915D7 /* blending.cc */; };
+		F307EF0E28289000003915D7 /* dec_modular.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF528289000003915D7 /* dec_modular.cc */; };
+		F307EF0F28289000003915D7 /* dec_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF628289000003915D7 /* dec_cache.cc */; };
+		F307EF1028289000003915D7 /* dec_group.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF728289000003915D7 /* dec_group.cc */; };
+		F307EF1128289000003915D7 /* dec_upsample.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF828289000003915D7 /* dec_upsample.cc */; };
+		F307EF1228289000003915D7 /* ans_common.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEF928289000003915D7 /* ans_common.cc */; };
+		F307EF1328289000003915D7 /* aux_out.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEFA28289000003915D7 /* aux_out.cc */; };
+		F307EF1428289000003915D7 /* color_encoding_internal.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEFB28289000003915D7 /* color_encoding_internal.cc */; };
+		F307EF1528289000003915D7 /* chroma_from_luma.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEFC28289000003915D7 /* chroma_from_luma.cc */; };
+		F307EF1628289000003915D7 /* convolve.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEFD28289000003915D7 /* convolve.cc */; };
+		F307EF1728289000003915D7 /* alpha.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEFE28289000003915D7 /* alpha.cc */; };
+		F307EF1828289000003915D7 /* dec_group_border.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EEFF28289000003915D7 /* dec_group_border.cc */; };
+		F307EF1928289000003915D7 /* color_management.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF0028289000003915D7 /* color_management.cc */; };
+		F307EF1A28289000003915D7 /* dec_context_map.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF0128289000003915D7 /* dec_context_map.cc */; };
+		F307EF352828909A003915D7 /* enc_bit_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF1B2828909A003915D7 /* enc_bit_writer.cc */; };
+		F307EF362828909A003915D7 /* decode.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF1C2828909A003915D7 /* decode.cc */; };
+		F307EF372828909A003915D7 /* entropy_coder.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF1D2828909A003915D7 /* entropy_coder.cc */; };
+		F307EF382828909A003915D7 /* loop_filter.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF1E2828909A003915D7 /* loop_filter.cc */; };
+		F307EF392828909A003915D7 /* quantizer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF1F2828909A003915D7 /* quantizer.cc */; };
+		F307EF3A2828909A003915D7 /* dec_xyb.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF202828909A003915D7 /* dec_xyb.cc */; };
+		F307EF3B2828909A003915D7 /* fields.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF212828909A003915D7 /* fields.cc */; };
+		F307EF3C2828909A003915D7 /* filters.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF222828909A003915D7 /* filters.cc */; };
+		F307EF3D2828909A003915D7 /* memory_manager_internal.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF232828909A003915D7 /* memory_manager_internal.cc */; };
+		F307EF3E2828909A003915D7 /* image_bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF242828909A003915D7 /* image_bundle.cc */; };
+		F307EF3F2828909A003915D7 /* toc.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF252828909A003915D7 /* toc.cc */; };
+		F307EF402828909A003915D7 /* luminance.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF262828909A003915D7 /* luminance.cc */; };
+		F307EF412828909A003915D7 /* headers.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF272828909A003915D7 /* headers.cc */; };
+		F307EF422828909A003915D7 /* icc_codec_common.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF282828909A003915D7 /* icc_codec_common.cc */; };
+		F307EF432828909A003915D7 /* epf.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF292828909A003915D7 /* epf.cc */; };
+		F307EF442828909A003915D7 /* quant_weights.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF2A2828909A003915D7 /* quant_weights.cc */; };
+		F307EF452828909A003915D7 /* huffman_table.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF2B2828909A003915D7 /* huffman_table.cc */; };
+		F307EF462828909A003915D7 /* passes_state.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF2C2828909A003915D7 /* passes_state.cc */; };
+		F307EF472828909A003915D7 /* icc_codec.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF2D2828909A003915D7 /* icc_codec.cc */; };
+		F307EF482828909A003915D7 /* image_metadata.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF2E2828909A003915D7 /* image_metadata.cc */; };
+		F307EF4A2828909A003915D7 /* gauss_blur.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF302828909A003915D7 /* gauss_blur.cc */; };
+		F307EF4B2828909A003915D7 /* opsin_params.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF312828909A003915D7 /* opsin_params.cc */; };
+		F307EF4C2828909A003915D7 /* image.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF322828909A003915D7 /* image.cc */; };
+		F307EF4D2828909A003915D7 /* frame_header.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF332828909A003915D7 /* frame_header.cc */; };
+		F307EF4E2828909A003915D7 /* splines.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF342828909A003915D7 /* splines.cc */; };
+		F307EF51282890D4003915D7 /* modular_image.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF50282890D4003915D7 /* modular_image.cc */; };
+		F307EF5528289103003915D7 /* transform.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF5328289103003915D7 /* transform.cc */; };
+		F307EF5628289103003915D7 /* squeeze.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF5428289103003915D7 /* squeeze.cc */; };
+		F307EF5A2828912C003915D7 /* dec_ma.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF582828912C003915D7 /* dec_ma.cc */; };
+		F307EF5B2828912C003915D7 /* encoding.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF592828912C003915D7 /* encoding.cc */; };
+		F307EF6B282891AE003915D7 /* descriptive_statistics.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF66282891AD003915D7 /* descriptive_statistics.cc */; };
+		F307EF6C282891AE003915D7 /* padded_bytes.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF67282891AD003915D7 /* padded_bytes.cc */; };
+		F307EF6D282891AE003915D7 /* status.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF68282891AD003915D7 /* status.cc */; };
+		F307EF6E282891AE003915D7 /* cache_aligned.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF69282891AE003915D7 /* cache_aligned.cc */; };
+		F307EF6F282891AE003915D7 /* data_parallel.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF6A282891AE003915D7 /* data_parallel.cc */; };
+		F307EF7628289218003915D7 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = F307EF7028289218003915D7 /* types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F307EF7728289218003915D7 /* color_encoding.h in Headers */ = {isa = PBXBuildFile; fileRef = F307EF7128289218003915D7 /* color_encoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F307EF7828289218003915D7 /* parallel_runner.h in Headers */ = {isa = PBXBuildFile; fileRef = F307EF7228289218003915D7 /* parallel_runner.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F307EF7928289218003915D7 /* codestream_header.h in Headers */ = {isa = PBXBuildFile; fileRef = F307EF7328289218003915D7 /* codestream_header.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F307EF7A28289218003915D7 /* memory_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = F307EF7428289218003915D7 /* memory_manager.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F307EF7B28289218003915D7 /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = F307EF7528289218003915D7 /* decode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F307EF7E2828925F003915D7 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = F307EF7C2828925F003915D7 /* LICENSE */; };
+		F307EF7F2828925F003915D7 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = F307EF7D2828925F003915D7 /* README.md */; };
+		F307EF8528289819003915D7 /* dec_jpeg_data_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF8228289819003915D7 /* dec_jpeg_data_writer.cc */; };
+		F307EF8628289819003915D7 /* dec_jpeg_data.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF8328289819003915D7 /* dec_jpeg_data.cc */; };
+		F307EF88282898DB003915D7 /* jpeg_data.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF87282898DB003915D7 /* jpeg_data.cc */; };
+		F307EF8A28289919003915D7 /* decode_to_jpeg.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF8928289919003915D7 /* decode_to_jpeg.cc */; };
+		F307EF8E2828C752003915D7 /* aligned_allocator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF8C2828C752003915D7 /* aligned_allocator.cc */; };
+		F307EF8F2828C752003915D7 /* targets.cc in Sources */ = {isa = PBXBuildFile; fileRef = F307EF8D2828C752003915D7 /* targets.cc */; };
+		F307EFA52828C84E003915D7 /* dictionary.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EFA32828C84E003915D7 /* dictionary.c */; };
+		F307EFA62828C84E003915D7 /* transform.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EFA42828C84E003915D7 /* transform.c */; };
+		F307EFB32828CA09003915D7 /* bit_reader.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EFAF2828CA09003915D7 /* bit_reader.c */; };
+		F307EFB42828CA09003915D7 /* decode.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EFB02828CA09003915D7 /* decode.c */; };
+		F307EFB52828CA09003915D7 /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EFB12828CA09003915D7 /* huffman.c */; };
+		F307EFB62828CA09003915D7 /* state.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EFB22828CA09003915D7 /* state.c */; };
+		F35474412828CA97007E9EDA /* jxl_export.h in Headers */ = {isa = PBXBuildFile; fileRef = F35474402828CA97007E9EDA /* jxl_export.h */; settings = {ATTRIBUTES = (Public, ); }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		F307EEDC28288CCF003915D7 /* jxl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = jxl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		F307EEE928289000003915D7 /* coeff_order.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = coeff_order.cc; path = ../../external/libjxl/lib/jxl/coeff_order.cc; sourceTree = "<group>"; };
+		F307EEEA28289000003915D7 /* dec_patch_dictionary.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_patch_dictionary.cc; path = ../../external/libjxl/lib/jxl/dec_patch_dictionary.cc; sourceTree = "<group>"; };
+		F307EEEB28289000003915D7 /* compressed_dc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compressed_dc.cc; path = ../../external/libjxl/lib/jxl/compressed_dc.cc; sourceTree = "<group>"; };
+		F307EEEC28289000003915D7 /* dec_reconstruct.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_reconstruct.cc; path = ../../external/libjxl/lib/jxl/dec_reconstruct.cc; sourceTree = "<group>"; };
+		F307EEED28289000003915D7 /* dec_frame.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_frame.cc; path = ../../external/libjxl/lib/jxl/dec_frame.cc; sourceTree = "<group>"; };
+		F307EEEE28289000003915D7 /* ac_strategy.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ac_strategy.cc; path = ../../external/libjxl/lib/jxl/ac_strategy.cc; sourceTree = "<group>"; };
+		F307EEEF28289000003915D7 /* dec_noise.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_noise.cc; path = ../../external/libjxl/lib/jxl/dec_noise.cc; sourceTree = "<group>"; };
+		F307EEF028289000003915D7 /* dec_external_image.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_external_image.cc; path = ../../external/libjxl/lib/jxl/dec_external_image.cc; sourceTree = "<group>"; };
+		F307EEF128289000003915D7 /* dct_scales.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dct_scales.cc; path = ../../external/libjxl/lib/jxl/dct_scales.cc; sourceTree = "<group>"; };
+		F307EEF228289000003915D7 /* dec_huffman.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_huffman.cc; path = ../../external/libjxl/lib/jxl/dec_huffman.cc; sourceTree = "<group>"; };
+		F307EEF328289000003915D7 /* dec_ans.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_ans.cc; path = ../../external/libjxl/lib/jxl/dec_ans.cc; sourceTree = "<group>"; };
+		F307EEF428289000003915D7 /* blending.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blending.cc; path = ../../external/libjxl/lib/jxl/blending.cc; sourceTree = "<group>"; };
+		F307EEF528289000003915D7 /* dec_modular.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_modular.cc; path = ../../external/libjxl/lib/jxl/dec_modular.cc; sourceTree = "<group>"; };
+		F307EEF628289000003915D7 /* dec_cache.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_cache.cc; path = ../../external/libjxl/lib/jxl/dec_cache.cc; sourceTree = "<group>"; };
+		F307EEF728289000003915D7 /* dec_group.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_group.cc; path = ../../external/libjxl/lib/jxl/dec_group.cc; sourceTree = "<group>"; };
+		F307EEF828289000003915D7 /* dec_upsample.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_upsample.cc; path = ../../external/libjxl/lib/jxl/dec_upsample.cc; sourceTree = "<group>"; };
+		F307EEF928289000003915D7 /* ans_common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ans_common.cc; path = ../../external/libjxl/lib/jxl/ans_common.cc; sourceTree = "<group>"; };
+		F307EEFA28289000003915D7 /* aux_out.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = aux_out.cc; path = ../../external/libjxl/lib/jxl/aux_out.cc; sourceTree = "<group>"; };
+		F307EEFB28289000003915D7 /* color_encoding_internal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = color_encoding_internal.cc; path = ../../external/libjxl/lib/jxl/color_encoding_internal.cc; sourceTree = "<group>"; };
+		F307EEFC28289000003915D7 /* chroma_from_luma.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = chroma_from_luma.cc; path = ../../external/libjxl/lib/jxl/chroma_from_luma.cc; sourceTree = "<group>"; };
+		F307EEFD28289000003915D7 /* convolve.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = convolve.cc; path = ../../external/libjxl/lib/jxl/convolve.cc; sourceTree = "<group>"; };
+		F307EEFE28289000003915D7 /* alpha.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = alpha.cc; path = ../../external/libjxl/lib/jxl/alpha.cc; sourceTree = "<group>"; };
+		F307EEFF28289000003915D7 /* dec_group_border.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_group_border.cc; path = ../../external/libjxl/lib/jxl/dec_group_border.cc; sourceTree = "<group>"; };
+		F307EF0028289000003915D7 /* color_management.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = color_management.cc; path = ../../external/libjxl/lib/jxl/color_management.cc; sourceTree = "<group>"; };
+		F307EF0128289000003915D7 /* dec_context_map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_context_map.cc; path = ../../external/libjxl/lib/jxl/dec_context_map.cc; sourceTree = "<group>"; };
+		F307EF1B2828909A003915D7 /* enc_bit_writer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = enc_bit_writer.cc; path = ../../external/libjxl/lib/jxl/enc_bit_writer.cc; sourceTree = "<group>"; };
+		F307EF1C2828909A003915D7 /* decode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = decode.cc; path = ../../external/libjxl/lib/jxl/decode.cc; sourceTree = "<group>"; };
+		F307EF1D2828909A003915D7 /* entropy_coder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = entropy_coder.cc; path = ../../external/libjxl/lib/jxl/entropy_coder.cc; sourceTree = "<group>"; };
+		F307EF1E2828909A003915D7 /* loop_filter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = loop_filter.cc; path = ../../external/libjxl/lib/jxl/loop_filter.cc; sourceTree = "<group>"; };
+		F307EF1F2828909A003915D7 /* quantizer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quantizer.cc; path = ../../external/libjxl/lib/jxl/quantizer.cc; sourceTree = "<group>"; };
+		F307EF202828909A003915D7 /* dec_xyb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dec_xyb.cc; path = ../../external/libjxl/lib/jxl/dec_xyb.cc; sourceTree = "<group>"; };
+		F307EF212828909A003915D7 /* fields.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fields.cc; path = ../../external/libjxl/lib/jxl/fields.cc; sourceTree = "<group>"; };
+		F307EF222828909A003915D7 /* filters.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filters.cc; path = ../../external/libjxl/lib/jxl/filters.cc; sourceTree = "<group>"; };
+		F307EF232828909A003915D7 /* memory_manager_internal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = memory_manager_internal.cc; path = ../../external/libjxl/lib/jxl/memory_manager_internal.cc; sourceTree = "<group>"; };
+		F307EF242828909A003915D7 /* image_bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = image_bundle.cc; path = ../../external/libjxl/lib/jxl/image_bundle.cc; sourceTree = "<group>"; };
+		F307EF252828909A003915D7 /* toc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = toc.cc; path = ../../external/libjxl/lib/jxl/toc.cc; sourceTree = "<group>"; };
+		F307EF262828909A003915D7 /* luminance.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = luminance.cc; path = ../../external/libjxl/lib/jxl/luminance.cc; sourceTree = "<group>"; };
+		F307EF272828909A003915D7 /* headers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = headers.cc; path = ../../external/libjxl/lib/jxl/headers.cc; sourceTree = "<group>"; };
+		F307EF282828909A003915D7 /* icc_codec_common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = icc_codec_common.cc; path = ../../external/libjxl/lib/jxl/icc_codec_common.cc; sourceTree = "<group>"; };
+		F307EF292828909A003915D7 /* epf.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = epf.cc; path = ../../external/libjxl/lib/jxl/epf.cc; sourceTree = "<group>"; };
+		F307EF2A2828909A003915D7 /* quant_weights.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quant_weights.cc; path = ../../external/libjxl/lib/jxl/quant_weights.cc; sourceTree = "<group>"; };
+		F307EF2B2828909A003915D7 /* huffman_table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = huffman_table.cc; path = ../../external/libjxl/lib/jxl/huffman_table.cc; sourceTree = "<group>"; };
+		F307EF2C2828909A003915D7 /* passes_state.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = passes_state.cc; path = ../../external/libjxl/lib/jxl/passes_state.cc; sourceTree = "<group>"; };
+		F307EF2D2828909A003915D7 /* icc_codec.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = icc_codec.cc; path = ../../external/libjxl/lib/jxl/icc_codec.cc; sourceTree = "<group>"; };
+		F307EF2E2828909A003915D7 /* image_metadata.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = image_metadata.cc; path = ../../external/libjxl/lib/jxl/image_metadata.cc; sourceTree = "<group>"; };
+		F307EF302828909A003915D7 /* gauss_blur.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gauss_blur.cc; path = ../../external/libjxl/lib/jxl/gauss_blur.cc; sourceTree = "<group>"; };
+		F307EF312828909A003915D7 /* opsin_params.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opsin_params.cc; path = ../../external/libjxl/lib/jxl/opsin_params.cc; sourceTree = "<group>"; };
+		F307EF322828909A003915D7 /* image.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType 

(Patch may be truncated, please check the link at the top of this post.)