Blob Blame History Raw
From 153c4a4c4fd9ab142004d3448d1de4923a15a871 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= <rverschelde@gmail.com>
Date: Thu, 6 Jul 2023 14:46:34 +0200
Subject: [PATCH] Linux: Allow unbundling brotli to use system library

---
 SConstruct                  | 1 +
 core/SCsub                  | 2 +-
 core/io/compression.cpp     | 8 ++++----
 platform/linuxbsd/detect.py | 3 +++
 4 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/SConstruct b/SConstruct
index f65e6bab04b29..7e706e8e73de0 100644
--- a/SConstruct
+++ b/SConstruct
@@ -222,6 +222,7 @@ opts.Add(BoolVariable("use_precise_math_checks", "Math checks use very precise e
 opts.Add(BoolVariable("scu_build", "Use single compilation unit build", False))
 
 # Thirdparty libraries
+opts.Add(BoolVariable("builtin_brotli", "Use the built-in Brotli library", True))
 opts.Add(BoolVariable("builtin_certs", "Use the built-in SSL certificates bundles", True))
 opts.Add(BoolVariable("builtin_embree", "Use the built-in Embree library", True))
 opts.Add(BoolVariable("builtin_enet", "Use the built-in ENet library", True))
diff --git a/core/SCsub b/core/SCsub
index a0176f6c3345e..7e9cd97351b2c 100644
--- a/core/SCsub
+++ b/core/SCsub
@@ -65,7 +65,7 @@ thirdparty_misc_sources = [thirdparty_misc_dir + file for file in thirdparty_mis
 env_thirdparty.add_source_files(thirdparty_obj, thirdparty_misc_sources)
 
 # Brotli
-if env["brotli"]:
+if env["brotli"] and env["builtin_brotli"]:
     thirdparty_brotli_dir = "#thirdparty/brotli/"
     thirdparty_brotli_sources = [
         "common/constants.c",
diff --git a/core/io/compression.cpp b/core/io/compression.cpp
index ac4a637597386..e36fb0afa4fd3 100644
--- a/core/io/compression.cpp
+++ b/core/io/compression.cpp
@@ -35,13 +35,13 @@
 
 #include "thirdparty/misc/fastlz.h"
 
-#ifdef BROTLI_ENABLED
-#include "thirdparty/brotli/include/brotli/decode.h"
-#endif
-
 #include <zlib.h>
 #include <zstd.h>
 
+#ifdef BROTLI_ENABLED
+#include <brotli/decode.h>
+#endif
+
 int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode) {
 	switch (p_mode) {
 		case MODE_BROTLI: {
diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py
index 9faa73d6d2408..6bde9233c26f3 100644
--- a/platform/linuxbsd/detect.py
+++ b/platform/linuxbsd/detect.py
@@ -240,6 +240,9 @@ def configure(env: "Environment"):
     if not env["builtin_zstd"]:
         env.ParseConfig("pkg-config libzstd --cflags --libs")
 
+    if env["brotli"] and not env["builtin_brotli"]:
+        env.ParseConfig("pkg-config libbrotlicommon libbrotlidec --cflags --libs")
+
     # Sound and video libraries
     # Keep the order as it triggers chained dependencies (ogg needed by others, etc.)