GraphicsMagick: 5 new changesets

GraphicsMagick Commits <[email protected]> Wed, 15 Jan 2025 10:39:56 -0600
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.47888.1736959211.7833.graphicsmagick-commit@lists.sourceforge.net>
changeset fa9f006357ed in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=fa9f006357ed
summary: Added tag GraphicsMagick-1_3_42 for changeset 8f02b37bc3d6

changeset ed87ccf127ac in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=ed87ccf127ac
summary: Added tag GraphicsMagick-1_3_43 for changeset 8f02b37bc3d6

changeset bbb58ab3081d in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=bbb58ab3081d
summary: Removed tag GraphicsMagick-1_3_42

changeset a131be50667e in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=a131be50667e
summary: Added tag GraphicsMagick-1_3_42 for changeset 6ae1ff7cda9d

changeset 5165261111c1 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=5165261111c1
summary: JPEG: Properly invert CMYK components when writing.

diffstat:

 .hgtags                                |    7 +
 ChangeLog                              |   14 +++
 Makefile.am                            |    2 +-
 Makefile.in                            |    4 +-
 NEWS.txt                               |    5 +-
 VisualMagick/installer/inc/version.isx |    4 +-
 coders/jpeg.c                          |  122 ++++++++++++++++++++++++--------
 magick/version.h                       |    4 +-
 www/ChangeLog.html                     |   22 ++++-
 www/INSTALL-unix.html                  |   12 ++-
 www/INSTALL-unix.rst                   |   12 ++-
 www/Makefile.am                        |    2 +-
 www/NEWS.html                          |    4 +-
 13 files changed, 159 insertions(+), 55 deletions(-)

diffs (485 lines):

diff -r e5d4aab85dc2 -r 5165261111c1 .hgtags
--- a/.hgtags	Mon Jan 06 10:43:14 2025 -0600
+++ b/.hgtags	Wed Jan 15 10:39:15 2025 -0600
@@ -74,3 +74,10 @@
 24d85185b7a3b5a5e9cc74ebf7d0e94ca60d7157 ImageMagick-5_2_6
 bc8483ab69f9a2752475e122fa60dc024040b865 ImageMagick-5_2_7
 c4404631fa1c5235083ddff0653ad93c10e4829b ImageMagick-5_2_5
+8f02b37bc3d6a9af4e7ce7e108d261c8ba754fb8 GraphicsMagick-1_3_42
+eff5b40bc7702651ceffbe0eeb26d5cd278abf95 GraphicsMagick-1_3_43
+8f02b37bc3d6a9af4e7ce7e108d261c8ba754fb8 GraphicsMagick-1_3_43
+8f02b37bc3d6a9af4e7ce7e108d261c8ba754fb8 GraphicsMagick-1_3_42
+0000000000000000000000000000000000000000 GraphicsMagick-1_3_42
+0000000000000000000000000000000000000000 GraphicsMagick-1_3_42
+6ae1ff7cda9d507484bb17adfd889d06600a96ca GraphicsMagick-1_3_42
diff -r e5d4aab85dc2 -r 5165261111c1 ChangeLog
--- a/ChangeLog	Mon Jan 06 10:43:14 2025 -0600
+++ b/ChangeLog	Wed Jan 15 10:39:15 2025 -0600
@@ -1,3 +1,17 @@
+2025-01-15  Bob Friesenhahn  <[email protected]>
+
+	* NEWS.txt: Update the news.
+
+	* coders/jpeg.c (WriteJPEGImage): Properly invert CMYK components
+	when writing.  Addresses SourceForge bug #751 "all CMYK colorspace
+	image become black-white inverted".  This bug was introduced in
+	GraphicsMagick 1.3.43. Existing files which appear "corrupt" due
+	to this issue may be salvaged by using the -negate command like
+	"gm convert bad-cmyk.jpg -negate good-cmyk.jpg".
+
+	* www/INSTALL-unix.rst: Document the Docutils version necessary to
+	format reStructuredText files to HTML format.
+
 2025-01-06  Bob Friesenhahn  <[email protected]>
 
 	* www/wand/Makefile.am ($(WWWWANDAPIDIR)/%.apirst): Pass an
diff -r e5d4aab85dc2 -r 5165261111c1 Makefile.am
--- a/Makefile.am	Mon Jan 06 10:43:14 2025 -0600
+++ b/Makefile.am	Wed Jan 15 10:39:15 2025 -0600
@@ -153,7 +153,7 @@
 	$(TESTS_EXTRA_DIST) \
 	$(UTILITIES_EXTRA_DIST) \
 	$(WAND_EXTRA_DIST) \
-	$(WWWW_EXTRA_DIST) \
+	$(WWW_EXTRA_DIST) \
 	$(WWWAPI_EXTRA_DIST) \
 	$(WWWWANDAPI_EXTRA_DIST)
 
diff -r e5d4aab85dc2 -r 5165261111c1 Makefile.in
--- a/Makefile.in	Mon Jan 06 10:43:14 2025 -0600
+++ b/Makefile.in	Wed Jan 15 10:39:15 2025 -0600
@@ -2896,7 +2896,7 @@
 	$(TESTS_EXTRA_DIST) \
 	$(UTILITIES_EXTRA_DIST) \
 	$(WAND_EXTRA_DIST) \
-	$(WWWW_EXTRA_DIST) \
+	$(WWW_EXTRA_DIST) \
 	$(WWWAPI_EXTRA_DIST) \
 	$(WWWWANDAPI_EXTRA_DIST)
 
@@ -4707,7 +4707,7 @@
 	$(WWWDIR)/utilities.html\
 	$(WWWDIR)/wand/wand.html
 
-WWWW_EXTRA_DIST = $(WWW_HTML_FILES) $(WWW_RST_FILES)
+WWW_EXTRA_DIST = $(WWW_HTML_FILES) $(WWW_RST_FILES)
 WWW_MAINTAINER_TARGETS = $(WWW_HTML_FILES) $(WWWDIR)/color.html
 @MAINTAINER_MODE_TRUE@NAMED_COLORS = $(top_srcdir)/scripts/named_colors.py
 @MAINTAINER_MODE_TRUE@RST2HTML5 = $(top_srcdir)/scripts/rst2html5.py
diff -r e5d4aab85dc2 -r 5165261111c1 NEWS.txt
--- a/NEWS.txt	Mon Jan 06 10:43:14 2025 -0600
+++ b/NEWS.txt	Wed Jan 15 10:39:15 2025 -0600
@@ -6,7 +6,7 @@
 GraphicsMagick News
 ===================
 
-This file was last updated to reflect changes up to January 4, 2025.
+This file was last updated to reflect changes up to January 15, 2025.
 
 Please note that this file records news for the associated development
 branch and that each development branch has its own NEWS file. See the
@@ -45,6 +45,9 @@
   image is indicated to be opaque. This avoids issues with code which
   assumes that the opacity channel is always initialized.
 
+* JPEG: Since GraphicsMagick 1.3.43, CMYK JPEG has been writing
+  inverted. This bug is now fixed.
+
 * TclMagick: The TclMagick build uses the latest TEA tcl.m4 macros,
   while modernizing the Automake and Autoconf files. Many defects in
   the C code are corrected.  The libttkcommon "shim" library,
diff -r e5d4aab85dc2 -r 5165261111c1 VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx	Mon Jan 06 10:43:14 2025 -0600
+++ b/VisualMagick/installer/inc/version.isx	Wed Jan 15 10:39:15 2025 -0600
@@ -10,5 +10,5 @@
 
 #define public MagickPackageName "GraphicsMagick"
 #define public MagickPackageVersion "1.4"
-#define public MagickPackageVersionAddendum ".020250106"
-#define public MagickPackageReleaseDate "snapshot-20250106"
+#define public MagickPackageVersionAddendum ".020250115"
+#define public MagickPackageReleaseDate "snapshot-20250115"
diff -r e5d4aab85dc2 -r 5165261111c1 coders/jpeg.c
--- a/coders/jpeg.c	Mon Jan 06 10:43:14 2025 -0600
+++ b/coders/jpeg.c	Wed Jan 15 10:39:15 2025 -0600
@@ -2832,13 +2832,19 @@
     }
 
   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-                        "  Write JPEG Image: image->orientation = %d",image->orientation);
+                        "  Write JPEG Image: image->orientation = %d",
+                        image->orientation);
 
   /*
     Transform image to user-requested colorspace.
   */
   if (UndefinedColorspace != image_info->colorspace)
     {
+      if (image->logging)
+        (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                              "  Transforming colorspace from %s to %s",
+                              ColorspaceTypeToString(image->colorspace),
+                              ColorspaceTypeToString(image_info->colorspace));
       (void) TransformColorspace(image,image_info->colorspace);
     }
   /*
@@ -2849,6 +2855,10 @@
   else if (IsRGBCompatibleColorspace(image->colorspace) &&
            !IsRGBColorspace(image->colorspace))
     {
+      if (image->logging)
+        (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                              "  Transforming colorspace from %s to RGB",
+                              ColorspaceTypeToString(image->colorspace));
       (void) TransformColorspace(image,RGBColorspace);
     }
 
@@ -3038,6 +3048,9 @@
 #endif /* if defined(HAVE_JPEG_ENABLE_LOSSLESS) && HAVE_JPEG_ENABLE_LOSSLESS */
 #endif /* if defined(HAVE_JPEG16_WRITE_SCANLINES) && HAVE_JPEG16_WRITE_SCANLINES */
             }
+          if (image->logging)
+            (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                  "  Set data precision: %u", jpeg_info.data_precision);
         }
     }
   if ((image->x_resolution == 0) || (image->y_resolution == 0))
@@ -3088,15 +3101,40 @@
     if ((value=AccessDefinition(image_info,"jpeg","dct-method")))
       {
         if (LocaleCompare(value,"ISLOW") == 0)
-          jpeg_info.dct_method=JDCT_ISLOW;
+          {
+            jpeg_info.dct_method=JDCT_ISLOW;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Set DCT method ISLOW");
+          }
         else if (LocaleCompare(value,"IFAST") == 0)
-          jpeg_info.dct_method=JDCT_IFAST;
+          {
+            jpeg_info.dct_method=JDCT_IFAST;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Set DCT method IFAST");
+          }
         else if (LocaleCompare(value,"FLOAT") == 0)
-          jpeg_info.dct_method=JDCT_FLOAT;
+          {
+            jpeg_info.dct_method=JDCT_FLOAT;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Set DCT method FLOAT");
+          }
         else if (LocaleCompare(value,"DEFAULT") == 0)
-          jpeg_info.dct_method=JDCT_DEFAULT;
+          {
+            jpeg_info.dct_method=JDCT_DEFAULT;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Set DCT method DEFAULT");
+          }
         else if (LocaleCompare(value,"FASTEST") == 0)
-          jpeg_info.dct_method=JDCT_FASTEST;
+          {
+            jpeg_info.dct_method=JDCT_FASTEST;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Set DCT method FASTEST");
+          }
       }
   }
 
@@ -3113,9 +3151,19 @@
     if ((value=AccessDefinition(image_info,"jpeg","arithmetic-coding")))
       {
         if (LocaleCompare(value,"FALSE") == 0)
-          jpeg_info.arith_code = False;
+          {
+            jpeg_info.arith_code = False;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Disabled arithmetic coding");
+          }
         else
-          jpeg_info.arith_code = True;
+          {
+            jpeg_info.arith_code = True;
+            if (image->logging)
+              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                    "  Enabled arithmetic coding");
+          }
       }
     if (!jpeg_info.arith_code)     /* jpeg_info.optimize_coding must not be set to enable arithmetic. */
 #endif /* if defined(C_ARITH_CODING_SUPPORTED) */
@@ -3123,9 +3171,19 @@
         if ((value=AccessDefinition(image_info,"jpeg","optimize-coding")))
           {
             if (LocaleCompare(value,"FALSE") == 0)
-              jpeg_info.optimize_coding=MagickFalse;
+              {
+                jpeg_info.optimize_coding=MagickFalse;
+                if (image->logging)
+                  (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                        "  Disabled optimize coding");
+              }
             else
-              jpeg_info.optimize_coding=MagickTrue;
+              {
+                jpeg_info.optimize_coding=MagickTrue;
+                if (image->logging)
+                  (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+                                        "  Enabled optimize coding");
+              }
           }
         else
           {
@@ -3144,7 +3202,7 @@
           huffman_memory=0;
         if (image->logging)
           (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-                                "Huffman optimization is %s",
+                                "  Huffman optimization is %s",
                                 (jpeg_info.optimize_coding ? "enabled" : "disabled"));
       }
   }
@@ -3164,7 +3222,7 @@
 #else
   if (image->logging)
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-                          "Interlace:  nonprogressive");
+                          "Interlace: nonprogressive");
 #endif
   if (image->logging)
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
@@ -3436,7 +3494,9 @@
 
   if (image->logging)
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-                          "Writing %u bit %s samples...",
+                          "Writing %d components, %u bits per component,"
+                          " with colorspace %s...",
+                          jpeg_info.input_components,
                           jpeg_info.data_precision,
                           JPEGColorSpaceToString(jpeg_info.in_color_space));
 
@@ -3493,10 +3553,10 @@
                 i=0;
                 for (x=0; x < (long) image->columns; x++)
                   {
-                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(ScaleQuantumToShort(p->red));
-                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(ScaleQuantumToShort(p->green));
-                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(ScaleQuantumToShort(p->blue));
-                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(ScaleQuantumToShort(p->opacity));
+                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(65535U-ScaleQuantumToShort(p->red));
+                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(65535U-ScaleQuantumToShort(p->green));
+                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(65535U-ScaleQuantumToShort(p->blue));
+                    jpeg_pixels.t.j16[i++] = (J16SAMPLE)(65535U-ScaleQuantumToShort(p->opacity));
                     p++;
                   }
               } /* End deep JCS_CMYK */
@@ -3553,10 +3613,10 @@
                 i=0;
                 for (x=0; x < (long) image->columns; x++)
                   {
-                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(ScaleQuantumToShort(p->red)/16);
-                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(ScaleQuantumToShort(p->green)/16);
-                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(ScaleQuantumToShort(p->blue)/16);
-                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(ScaleQuantumToShort(p->opacity)/16);
+                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(4095U-ScaleQuantumToShort(p->red)/16);
+                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(4095U-ScaleQuantumToShort(p->green)/16);
+                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(4095U-ScaleQuantumToShort(p->blue)/16);
+                    jpeg_pixels.t.j12[i++] = (J12SAMPLE)(4095U-ScaleQuantumToShort(p->opacity)/16);
                     p++;
                   }
               } /* End deep JCS_CMYK */
@@ -3570,7 +3630,7 @@
               scanline[1];
 
             if (jpeg_info.in_color_space == JCS_GRAYSCALE)
-              { /* Start deep JCS_GRAYSCALE */
+              { /* Start traditional JCS_GRAYSCALE */
                 if (image->is_grayscale)
                   {
                     i=0;
@@ -3589,10 +3649,10 @@
                         p++;
                       }
                   }
-              } /* End deep JCS_GRAYSCALE */
+              } /* End traditional JCS_GRAYSCALE */
             else if ((jpeg_info.in_color_space == JCS_RGB) ||
                      (jpeg_info.in_color_space == JCS_YCbCr))
-              { /* Start deep JCS_RGB || JCS_YCbCr */
+              { /* Start traditional JCS_RGB || JCS_YCbCr */
                 i=0;
                 for (x=0; x < (long) image->columns; x++)
                   {
@@ -3601,19 +3661,19 @@
                     jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(p->blue));
                     p++;
                   }
-              } /* End deep JCS_RGB || JCS_YCbCr */
+              } /* End traditional JCS_RGB || JCS_YCbCr */
             else if (jpeg_info.in_color_space == JCS_CMYK)
-              { /* Start deep JCS_CMYK */
+              { /* Start traditional JCS_CMYK */
                 i=0;
                 for (x=0; x < (long) image->columns; x++)
                   {
-                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(p->red));
-                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(p->green));
-                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(p->blue));
-                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(p->opacity));
+                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(MaxRGB-p->red));
+                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(MaxRGB-p->green));
+                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(MaxRGB-p->blue));
+                    jpeg_pixels.t.j[i++]=(JSAMPLE)(ScaleQuantumToChar(MaxRGB-p->opacity));
                     p++;
                   }
-              } /* End deep JCS_CMYK */
+              } /* End traditional JCS_CMYK */
 
             scanline[0]=(JSAMPROW) jpeg_pixels.t.j;
             (void) jpeg_write_scanlines(&jpeg_info,scanline,1);
diff -r e5d4aab85dc2 -r 5165261111c1 magick/version.h
--- a/magick/version.h	Mon Jan 06 10:43:14 2025 -0600
+++ b/magick/version.h	Wed Jan 15 10:39:15 2025 -0600
@@ -38,8 +38,8 @@
 #define MagickLibVersion  0x282502
 #define MagickLibVersionText  "1.4"
 #define MagickLibVersionNumber 28,25,2
-#define MagickChangeDate   "20250106"
-#define MagickReleaseDate  "snapshot-20250106"
+#define MagickChangeDate   "20250115"
+#define MagickReleaseDate  "snapshot-20250115"
 
 /*
   The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
diff -r e5d4aab85dc2 -r 5165261111c1 www/ChangeLog.html
--- a/www/ChangeLog.html	Mon Jan 06 10:43:14 2025 -0600
+++ b/www/ChangeLog.html	Wed Jan 15 10:39:15 2025 -0600
@@ -38,15 +38,25 @@
 
 <main id="graphicsmagick-changelog">
 <h1 class="title">GraphicsMagick ChangeLog</h1>
+<p>2025-01-15  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
+<blockquote>
+<ul class="simple">
+<li><p>NEWS.txt: Update the news.</p></li>
+<li><p>coders/jpeg.c (WriteJPEGImage): Properly invert CMYK components
+when writing.  Addresses SourceForge bug #751 &quot;all CMYK colorspace
+image become black-white inverted&quot;.  This bug was introduced in
+GraphicsMagick 1.3.43. Existing files which appear &quot;corrupt&quot; due
+to this issue may be salvaged by using the -negate command like
+&quot;gm convert bad-cmyk.jpg -negate good-cmyk.jpg&quot;.</p></li>
+<li><p>www/INSTALL-unix.rst: Document the Docutils version necessary to
+format reStructuredText files to HTML format.</p></li>
+</ul>
+</blockquote>
 <p>2025-01-06  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
 <blockquote>
 <ul class="simple">
-<li><p>www/wand/Makefile.am ($(WWWWANDAPIDIR)/%.apirst): Use
-$(abs_top_srcdir) rather than $(top_srcdir) for the --include-rst
-argument when invoking format_c_api_doc.py to assure correct
-function if the build tree was configured using a relative path to
-the source directory, and the current working directory is
-changed.</p></li>
+<li><p>www/wand/Makefile.am ($(WWWWANDAPIDIR)/%.apirst): Pass an
+absolute path to format_c_api_doc.py --include-rst argument.</p></li>
 <li><p>magick/magick_endian.c (MagickReverseBits): Function has never
 been used for anything.  Mark it as deprecated.
 MagickGetBitRevTable(): Function has never been used for anything.
diff -r e5d4aab85dc2 -r 5165261111c1 www/INSTALL-unix.html
--- a/www/INSTALL-unix.html	Mon Jan 06 10:43:14 2025 -0600
+++ b/www/INSTALL-unix.html	Wed Jan 15 10:39:15 2025 -0600
@@ -261,8 +261,10 @@
 </dd>
 <dt><kbd><span class="option">--enable-maintainer-mode</span></kbd></dt>
 <dd><p>enable additional Makefile rules which update generated files
-included in the distribution. Requires GNU make as well as a
-number of utilities and tools.</p>
+included in the distribution. Requires GNU make, Python 3, as well
+as a number of common development utilities and tools.  Python 3
+Docutils (0.17.1 or later) are required to format &quot;.rst&quot;
+reStructuredText files to HTML format.</p>
 </dd>
 <dt><kbd><span class="option">--enable-quantum-library-names</span></kbd></dt>
 <dd><p>shared library name includes quantum depth to allow shared
@@ -920,8 +922,10 @@
 <pre class="literal-block">dcraw, fonts-urw-base35, ghostscript, hp2xx,
 ttf-mscorefonts-installer</pre>
 <p>These additional packages are useful in order to maintain
-GraphicsMagick itself:</p>
-<pre class="literal-block">autoconf, automake, graphviz, libtool, docutils-common, python, m4</pre>
+GraphicsMagick itself (see the <span class="docutils literal"><span class="pre">--enable-maintainer-mode</span></span> configure
+option):</p>
+<pre class="literal-block">autoconf, automake, graphviz, libtool, python3-docutils,
+docutils-common, python3, m4</pre>
 </section>
 </section>
 <section id="building-under-cygwin">
diff -r e5d4aab85dc2 -r 5165261111c1 www/INSTALL-unix.rst
--- a/www/INSTALL-unix.rst	Mon Jan 06 10:43:14 2025 -0600
+++ b/www/INSTALL-unix.rst	Wed Jan 15 10:39:15 2025 -0600
@@ -245,8 +245,10 @@
 --enable-maintainer-mode
 
     enable additional Makefile rules which update generated files
-    included in the distribution. Requires GNU make as well as a
-    number of utilities and tools.
+    included in the distribution. Requires GNU make, Python 3, as well
+    as a number of common development utilities and tools.  Python 3
+    Docutils (0.17.1 or later) are required to format ".rst"
+    reStructuredText files to HTML format.
 
 --enable-quantum-library-names
 
@@ -898,9 +900,11 @@
   ttf-mscorefonts-installer
 
 These additional packages are useful in order to maintain
-GraphicsMagick itself::
+GraphicsMagick itself (see the ``--enable-maintainer-mode`` configure
+option)::
 
-  autoconf, automake, graphviz, libtool, docutils-common, python, m4
+  autoconf, automake, graphviz, libtool, python3-docutils,
+  docutils-common, python3, m4
 
 
 Building under Cygwin
diff -r e5d4aab85dc2 -r 5165261111c1 www/Makefile.am
--- a/www/Makefile.am	Mon Jan 06 10:43:14 2025 -0600
+++ b/www/Makefile.am	Wed Jan 15 10:39:15 2025 -0600
@@ -249,7 +249,7 @@
 	$(WWWDIR)/utilities.html\
 	$(WWWDIR)/wand/wand.html
 
-WWWW_EXTRA_DIST=$(WWW_HTML_FILES) $(WWW_RST_FILES)
+WWW_EXTRA_DIST=$(WWW_HTML_FILES) $(WWW_RST_FILES)
 
 WWW_MAINTAINER_TARGETS=$(WWW_HTML_FILES) $(WWWDIR)/color.html
 
diff -r e5d4aab85dc2 -r 5165261111c1 www/NEWS.html
--- a/www/NEWS.html	Mon Jan 06 10:43:14 2025 -0600
+++ b/www/NEWS.html	Wed Jan 15 10:39:15 2025 -0600
@@ -41,7 +41,7 @@
 <!-- -*- mode: rst -*- -->
 <!-- This text is in reStucturedText format, so it may look a bit odd. -->
 <!-- See http://docutils.sourceforge.net/rst.html for details. -->
-<p>This file was last updated to reflect changes up to January 4, 2025.</p>
+<p>This file was last updated to reflect changes up to January 15, 2025.</p>
 <p>Please note that this file records news for the associated development
 branch and that each development branch has its own NEWS file. See the
 ChangeLog file, and/or the Mercurial changesets, for full details.</p>
@@ -125,6 +125,8 @@
 <li><p>BMP: Assure that the opacity channel is initialized, even if the
 image is indicated to be opaque. This avoids issues with code which
 assumes that the opacity channel is always initialized.</p></li>
+<li><p>JPEG: Since GraphicsMagick 1.3.43, CMYK JPEG has been writing
+inverted. This bug is now fixed.</p></li>
 <li><p>TclMagick: The TclMagick build uses the latest TEA tcl.m4 macros,
 while modernizing the Automake and Autoconf files. Many defects in
 the C code are corrected.  The libttkcommon &quot;shim&quot; library,