SDL_image: Fixed bug #235: add options to disable saving png/jpg images

From 3af38eadcc44404bf0a1dfa7f9e62d70cb921949 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Sat, 14 May 2022 16:08:56 +0200
Subject: [PATCH] Fixed bug #235: add options to disable saving png/jpg images

---
 Android.mk   | 12 ++++++++++++
 IMG_jpg.c    | 10 +++++-----
 IMG_png.c    |  8 ++++----
 configure.ac | 14 ++++++++++++++
 4 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/Android.mk b/Android.mk
index c6d83db..7e8a346 100644
--- a/Android.mk
+++ b/Android.mk
@@ -16,6 +16,7 @@ DAV1D_LIBRARY_PATH := external/dav1d
 # Enable this if you want to support loading JPEG images using libjpeg
 # The library path should be a relative path to this directory.
 SUPPORT_JPG ?= false
+SUPPORT_SAVE_JPG ?= true
 JPG_LIBRARY_PATH := external/jpeg
 
 # Enable this if you want to support loading JPEG-XL images
@@ -26,6 +27,7 @@ JXL_LIBRARY_PATH := external/libjxl
 # Enable this if you want to support loading PNG images using libpng
 # The library path should be a relative path to this directory.
 SUPPORT_PNG ?= false
+SUPPORT_SAVE_PNG ?= true
 PNG_LIBRARY_PATH := external/libpng
 
 # Enable this if you want to support loading WebP images
@@ -113,6 +115,11 @@ ifeq ($(SUPPORT_JPG),true)
     LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(JPG_LIBRARY_PATH)
     LOCAL_CFLAGS += -DLOAD_JPG
     LOCAL_STATIC_LIBRARIES += jpeg
+ifeq ($(SUPPORT_SAVE_JPG),true)
+    LOCAL_CFLAGS += -DSDL_IMAGE_SAVE_JPG=1
+else
+    LOCAL_CFLAGS += -DSDL_IMAGE_SAVE_JPG=0
+endif
 endif
 
 ifeq ($(SUPPORT_JXL),true)
@@ -127,6 +134,11 @@ ifeq ($(SUPPORT_PNG),true)
     LOCAL_CFLAGS += -DLOAD_PNG
     LOCAL_STATIC_LIBRARIES += png
     LOCAL_LDLIBS += -lz
+ifeq ($(SUPPORT_SAVE_PNG),true)
+    LOCAL_CFLAGS += -DSDL_IMAGE_SAVE_PNG=1
+else
+    LOCAL_CFLAGS += -DSDL_IMAGE_SAVE_PNG=0
+endif
 endif
 
 ifeq ($(SUPPORT_WEBP),true)
diff --git a/IMG_jpg.c b/IMG_jpg.c
index 3c5cba6..c16ea33 100644
--- a/IMG_jpg.c
+++ b/IMG_jpg.c
@@ -28,8 +28,8 @@
 
 
 /* We'll have JPG save support by default */
-#ifndef SAVE_JPG
-#define SAVE_JPG    1
+#ifndef SDL_IMAGE_SAVE_JPG
+#define SDL_IMAGE_SAVE_JPG    1
 #endif
 
 #if defined(USE_STBIMAGE)
@@ -680,7 +680,7 @@ SDL_Surface *IMG_LoadJPG_RW(SDL_RWops *src)
 #endif /* LOAD_JPG */
 
 /* Use tinyjpeg as a fallback if we don't have a hard dependency on libjpeg */
-#if SAVE_JPG && (defined(LOAD_JPG_DYNAMIC) || !defined(WANT_JPEGLIB))
+#if SDL_IMAGE_SAVE_JPG && (defined(LOAD_JPG_DYNAMIC) || !defined(WANT_JPEGLIB))
 
 #ifdef __WATCOMC__ /* watcom has issues.. */
 #define ceilf ceil
@@ -760,7 +760,7 @@ static int IMG_SaveJPG_RW_tinyjpeg(SDL_Surface *surface, SDL_RWops *dst, int fre
     return result;
 }
 
-#endif /* SAVE_JPG && (defined(LOAD_JPG_DYNAMIC) || !defined(WANT_JPEGLIB)) */
+#endif /* SDL_IMAGE_SAVE_JPG && (defined(LOAD_JPG_DYNAMIC) || !defined(WANT_JPEGLIB)) */
 
 int IMG_SaveJPG(SDL_Surface *surface, const char *file, int quality)
 {
@@ -774,7 +774,7 @@ int IMG_SaveJPG(SDL_Surface *surface, const char *file, int quality)
 
 int IMG_SaveJPG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst, int quality)
 {
-#if SAVE_JPG
+#if SDL_IMAGE_SAVE_JPG
 #ifdef USE_JPEGLIB
     if ((IMG_Init(IMG_INIT_JPG) & IMG_INIT_JPG) != 0) {
         if (IMG_SaveJPG_RW_jpeglib(surface, dst, freedst, quality) == 0) {
diff --git a/IMG_png.c b/IMG_png.c
index 462fe2f..20f1c4a 100644
--- a/IMG_png.c
+++ b/IMG_png.c
@@ -24,8 +24,8 @@
 #include "SDL_image.h"
 
 /* We'll have PNG save support by default */
-#ifndef SAVE_PNG
-#define SAVE_PNG    1
+#if !defined(SDL_IMAGE_SAVE_PNG)
+#  define SDL_IMAGE_SAVE_PNG 1
 #endif
 
 #if defined(USE_STBIMAGE)
@@ -115,7 +115,7 @@ static struct {
     jmp_buf* (*png_set_longjmp_fn) (png_structrp, png_longjmp_ptr, size_t);
 #endif
 #endif
-#if SAVE_PNG
+#if SDL_IMAGE_SAVE_PNG
     png_structp (*png_create_write_struct) (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn);
     void (*png_destroy_write_struct) (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr);
     void (*png_set_write_fn) (png_structrp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn);
@@ -170,7 +170,7 @@ int IMG_InitPNG()
         FUNCTION_LOADER(png_set_longjmp_fn, jmp_buf* (*) (png_structrp, png_longjmp_ptr, size_t))
 #endif
 #endif
-#if SAVE_PNG
+#if SDL_IMAGE_SAVE_PNG
         FUNCTION_LOADER(png_create_write_struct, png_structp (*) (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn))
         FUNCTION_LOADER(png_destroy_write_struct, void (*) (png_structpp png_ptr_ptr, png_infopp info_ptr_ptr))
         FUNCTION_LOADER(png_set_write_fn, void (*) (png_structrp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn))
diff --git a/configure.ac b/configure.ac
index 54471b0..eeb75ba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -210,6 +210,8 @@ AC_ARG_ENABLE([jpg], [AS_HELP_STRING([--enable-jpg], [support loading JPG images
  [], [enable_jpg=yes])
 AC_ARG_ENABLE([jpg-shared], [AS_HELP_STRING([--enable-jpg-shared], [dynamically load JPG support [default=yes]])],
  [], [enable_jpg_shared=yes])
+AC_ARG_ENABLE([save-jpg], [AS_HELP_STRING([--enable-save-jpg], [support saving JPG images [default=yes]])],
+ [], [enable_save_jpg=yes])
 AC_ARG_ENABLE([jxl], [AS_HELP_STRING([--enable-jxl], [support loading JXL images [default=yes]])],
  [], [enable_jxl=yes])
 AC_ARG_ENABLE([jxl-shared], [AS_HELP_STRING([--enable-jxl-shared], [dynamically load JXL support [default=yes]])],
@@ -222,6 +224,8 @@ AC_ARG_ENABLE([png], [AS_HELP_STRING([--enable-png], [support loading PNG images
  [], [enable_png=yes])
 AC_ARG_ENABLE([png-shared], [AS_HELP_STRING([--enable-png-shared], [dynamically load PNG support [default=yes]])],
  [], [enable_png_shared=yes])
+AC_ARG_ENABLE([save-png], [AS_HELP_STRING([--enable-save-png], [support saving PNG images [default=yes]])],
+ [], [enable_save_png=yes])
 AC_ARG_ENABLE([pnm], [AS_HELP_STRING([--enable-pnm], [support loading PNM images [default=yes]])],
  [], [enable_pnm=yes])
 AC_ARG_ENABLE([svg], [AS_HELP_STRING([--enable-svg], [support loading SVG images [default=yes]])],
@@ -634,6 +638,16 @@ if test x$enable_png = xyes -a x$have_png_hdr = xyes -a x$have_png_lib = xyes; t
         fi
     fi
 fi
+if test x$enable_save_png = xyes; then
+    AC_DEFINE([SDL_IMAGE_SAVE_PNG])
+else
+    AC_DEFINE([SDL_IMAGE_SAVE_PNG], 0)
+fi
+if test x$enable_save_jpg = xyes; then
+    AC_DEFINE([SDL_IMAGE_SAVE_JPG])
+else
+    AC_DEFINE([SDL_IMAGE_SAVE_JPG], 0)
+fi
 
 AC_SUBST([IMG_LIBS])
 AC_SUBST([PC_LIBS])