public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: media-video/mjpegtools/files/, media-video/mjpegtools/
@ 2024-07-27 21:58 Sam James
  0 siblings, 0 replies; only message in thread
From: Sam James @ 2024-07-27 21:58 UTC (permalink / raw
  To: gentoo-commits

commit:     3f8de491a11fd52f6350c604247ebc0f630cab98
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 27 21:57:44 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Jul 27 21:57:44 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3f8de491

media-video/mjpegtools: various correctness fixes

* Fix build with GCC 15
* Fix LTO safety
* Fix C99 issue in configure

Closes: https://bugs.gentoo.org/899868
Closes: https://bugs.gentoo.org/927103
Closes: https://bugs.gentoo.org/936562
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/mjpegtools-2.2.1-gcc15-template.patch    | 349 +++++++++++++++++++++
 .../mjpegtools/files/mjpegtools-2.2.1-lto.patch    |  24 ++
 .../mjpegtools-2.2.1-puts-c99-configure.patch      |  13 +
 ...-2.2.1-r1.ebuild => mjpegtools-2.2.1-r2.ebuild} |   3 +
 4 files changed, 389 insertions(+)

diff --git a/media-video/mjpegtools/files/mjpegtools-2.2.1-gcc15-template.patch b/media-video/mjpegtools/files/mjpegtools-2.2.1-gcc15-template.patch
new file mode 100644
index 000000000000..66d017233233
--- /dev/null
+++ b/media-video/mjpegtools/files/mjpegtools-2.2.1-gcc15-template.patch
@@ -0,0 +1,349 @@
+https://bugs.gentoo.org/936562
+https://sourceforge.net/p/mjpeg/patches/63/
+--- a/y4mdenoise/Region2D.hh
++++ b/y4mdenoise/Region2D.hh
+@@ -97,35 +97,11 @@
+ 		// Add the given horizontal extent to the region.  Note that
+ 		// a_tnXEnd is technically one past the end of the extent.
+ 
+-	template <class REGION, class REGION_TEMP>
+-	void UnionDebug (Status_t &a_reStatus, INDEX a_tnY,
+-			INDEX a_tnXStart, INDEX a_tnXEnd, REGION_TEMP &a_rTemp);
+-		// Add the given horizontal extent to the region.  Note that
+-		// a_tnXEnd is technically one past the end of the extent.
+-		// Exhaustively (i.e. slowly) verifies the results, using a
+-		// much simpler algorithm.
+-		// Requires the use of a temporary region, usually of the
+-		// final subclass' type, in order to work.  (Since that can't
+-		// be known at this level, a template parameter is included for
+-		// it.)
+-
+ 	template <class REGION>
+ 	void Union (Status_t &a_reStatus, const REGION &a_rOther);
+ 		// Make the current region represent the union between itself
+ 		// and the other given region.
+ 
+-	template <class REGION, class REGION_O, class REGION_TEMP>
+-	void UnionDebug (Status_t &a_reStatus,
+-			REGION_O &a_rOther, REGION_TEMP &a_rTemp);
+-		// Make the current region represent the union between itself
+-		// and the other given region.
+-		// Exhaustively (i.e. slowly) verifies the results, using a
+-		// much simpler algorithm.
+-		// Requires the use of a temporary region, usually of the
+-		// final subclass' type, in order to work.  (Since that can't
+-		// be known at this level, a template parameter is included for
+-		// it.)
+-
+ 	//void Merge (Status_t &a_reStatus, INDEX a_tnY, INDEX a_tnXStart,
+ 	//		INDEX a_tnXEnd);
+ 		// Merge this extent into the current region.
+@@ -166,36 +142,11 @@
+ 		// Subtract the given horizontal extent from the region.  Note
+ 		// that a_tnXEnd is technically one past the end of the extent.
+ 
+-	template <class REGION_TEMP>
+-	void SubtractDebug (Status_t &a_reStatus, INDEX a_tnY,
+-			INDEX a_tnXStart, INDEX a_tnXEnd, REGION_TEMP &a_rTemp);
+-		// Subtract the given horizontal extent from the region.  Note
+-		// that a_tnXEnd is technically one past the end of the extent.
+-		// Exhaustively (i.e. slowly) verifies the results, using a
+-		// much simpler algorithm.
+-		// Requires the use of a temporary region, usually of the
+-		// final subclass' type, in order to work.  (Since that can't
+-		// be known at this level, a template parameter is included for
+-		// it.)
+-
+ 	template <class REGION>
+ 	void Subtract (Status_t &a_reStatus, const REGION &a_rOther);
+ 		// Subtract the other region from the current region, i.e.
+ 		// remove from the current region any extents that exist in the
+ 		// other region.
+-	
+-	template <class REGION, class REGION_O, class REGION_TEMP>
+-	void SubtractDebug (Status_t &a_reStatus, REGION_O &a_rOther,
+-			REGION_TEMP &a_rTemp);
+-		// Subtract the other region from the current region, i.e.
+-		// remove from the current region any extents that exist in the
+-		// other region.
+-		// Exhaustively (i.e. slowly) verifies the results, using a
+-		// much simpler algorithm.
+-		// Requires the use of a temporary region, usually of the
+-		// final subclass' type, in order to work.  (Since that can't
+-		// be known at this level, a template parameter is included for
+-		// it.)
+ 
+ 	//typedef ... ConstIterator;
+ 	//ConstIterator Begin (void) const { return m_setExtents.Begin(); }
+@@ -404,85 +355,6 @@
+ 
+ 
+ 
+-// Add the given horizontal extent to the region.
+-template <class INDEX, class SIZE>
+-template <class REGION, class REGION_TEMP>
+-void
+-Region2D<INDEX,SIZE>::UnionDebug (Status_t &a_reStatus, INDEX a_tnY,
+-	INDEX a_tnXStart, INDEX a_tnXEnd, REGION_TEMP &a_rTemp)
+-{
+-	typename REGION::ConstIterator itHere;
+-	typename REGION_TEMP::ConstIterator itHereO;
+-	INDEX tnX;
+-		// Used to loop through points.
+-
+-	// Make sure they didn't start us off with an error.
+-	assert (a_reStatus == g_kNoError);
+-
+-	// Calculate the union.
+-	a_rTemp.Assign (a_reStatus, *this);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-	a_rTemp.Union (a_reStatus, a_tnY, a_tnXStart, a_tnXEnd);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-	
+-	// Loop through every point in the result, make sure it's in
+-	// one of the two input regions.
+-	for (itHereO = a_rTemp.Begin(); itHereO != a_rTemp.End(); ++itHereO)
+-	{
+-		const Extent &rHere = *itHereO;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!((rHere.m_tnY == a_tnY
+-				&& (tnX >= a_tnXStart && tnX < a_tnXEnd))
+-			|| this->DoesContainPoint (rHere.m_tnY, tnX)))
+-				goto error;
+-		}
+-	}
+-
+-	// Loop through every point in the original region, make sure
+-	// it's in the result.
+-	for (itHere = this->Begin(); itHere != this->End(); ++itHere)
+-	{
+-		const Extent &rHere = *itHere;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX))
+-				goto error;
+-		}
+-	}
+-
+-	// Loop through every point in the added extent, make sure it's in
+-	// the result.
+-	for (tnX = a_tnXStart; tnX < a_tnXEnd; ++tnX)
+-	{
+-		if (!a_rTemp.DoesContainPoint (a_tnY, tnX))
+-			goto error;
+-	}
+-
+-	// The operation succeeded.  Commit it.
+-	Assign (a_reStatus, a_rTemp);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-
+-	// All done.
+-	return;
+-
+-error:
+-	// Handle deviations.
+-	fprintf (stderr, "Region2D::Union() failed\n");
+-	fprintf (stderr, "Input region:\n");
+-	PrintRegion (*this);
+-	fprintf (stderr, "Input extent: [%d,%d-%d]\n",
+-		int (a_tnY), int (a_tnXStart), int (a_tnXEnd));
+-	fprintf (stderr, "Result:\n");
+-	PrintRegion (a_rTemp);
+-	assert (false);
+-}
+-
+-
+-
+ // Make the current region represent the union between itself
+ // and the other given region.
+ template <class INDEX, class SIZE>
+@@ -511,184 +383,6 @@
+ 	}
+ }
+ 
+-
+-
+-// Make the current region represent the union between itself
+-// and the other given region.
+-template <class INDEX, class SIZE>
+-template <class REGION, class REGION_O, class REGION_TEMP>
+-void
+-Region2D<INDEX,SIZE>::UnionDebug (Status_t &a_reStatus,
+-	REGION_O &a_rOther, REGION_TEMP &a_rTemp)
+-{
+-	typename REGION::ConstIterator itHere;
+-	typename REGION_O::ConstIterator itHereO;
+-	typename REGION_TEMP::ConstIterator itHereT;
+-	INDEX tnX;
+-		// Used to loop through points.
+-
+-	// Make sure they didn't start us off with an error.
+-	assert (a_reStatus == g_kNoError);
+-
+-	// Calculate the union.
+-	a_rTemp.Assign (a_reStatus, *this);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-	a_rTemp.Union (a_reStatus, a_rOther);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-	
+-	// Loop through every point in the result, make sure it's in
+-	// one of the two input regions.
+-	for (itHereT = a_rTemp.Begin(); itHereT != a_rTemp.End(); ++itHereT)
+-	{
+-		const Extent &rHere = *itHereT;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!a_rOther.DoesContainPoint (rHere.m_tnY, tnX)
+-			&& !this->DoesContainPoint (rHere.m_tnY, tnX))
+-				goto error;
+-		}
+-	}
+-
+-	// Loop through every point in the first input region, make sure
+-	// it's in the result.
+-	for (itHere = this->Begin(); itHere != this->End(); ++itHere)
+-	{
+-		const Extent &rHere = *itHere;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX))
+-				goto error;
+-		}
+-	}
+-
+-	// Loop through every point in the second input region, make sure
+-	// it's in the result.
+-	for (itHereO = a_rOther.Begin();
+-		 itHereO != a_rOther.End();
+-		 ++itHereO)
+-	{
+-		const Extent &rHere = *itHereO;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX))
+-				goto error;
+-		}
+-	}
+-
+-	// The operation succeeded.  Commit it.
+-	Assign (a_reStatus, a_rTemp);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-
+-	// All done.
+-	return;
+-
+-error:
+-	// Handle deviations.
+-	fprintf (stderr, "Region2D::Union() failed\n");
+-	fprintf (stderr, "First input region:\n");
+-	PrintRegion (*this);
+-	fprintf (stderr, "Second input region:\n");
+-	PrintRegion (a_rOther);
+-	fprintf (stderr, "Result:\n");
+-	PrintRegion (a_rTemp);
+-	assert (false);
+-}
+-
+-
+-
+-// Subtract the other region from the current region, i.e.
+-// remove from the current region any areas that exist in the
+-// other region.
+-template <class INDEX, class SIZE>
+-template <class REGION, class REGION_O, class REGION_TEMP>
+-void
+-Region2D<INDEX,SIZE>::SubtractDebug (Status_t &a_reStatus,
+-	REGION_O &a_rOther, REGION_TEMP &a_rTemp)
+-{
+-	typename REGION::ConstIterator itHere;
+-	typename REGION_O::ConstIterator itHereO;
+-	typename REGION_TEMP::ConstIterator itHereT;
+-	INDEX tnX;
+-		// Used to loop through points.
+-
+-	// Make sure they didn't start us off with an error.
+-	assert (a_reStatus == g_kNoError);
+-
+-	// Calculate the difference.
+-	a_rTemp.Assign (a_reStatus, *this);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-	a_rTemp.Subtract (a_reStatus, a_rOther);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-	
+-	// Loop through every point in the result, make sure it's in
+-	// the first input region but not the second.
+-	for (itHereT = a_rTemp.Begin(); itHereT != a_rTemp.End(); ++itHereT)
+-	{
+-		const Extent &rHere = *itHereT;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!(this->DoesContainPoint (rHere.m_tnY, tnX)
+-			&& !a_rOther.DoesContainPoint (rHere.m_tnY, tnX)))
+-				goto error;
+-		}
+-	}
+-
+-	// Loop through every point in the first input region, and if it's
+-	// not in the second input region, make sure it's in the result.
+-	for (itHere = this->Begin(); itHere != this->End(); ++itHere)
+-	{
+-		const Extent &rHere = *itHere;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (!a_rOther.DoesContainPoint (rHere.m_tnY, tnX))
+-			{
+-				if (!a_rTemp.DoesContainPoint (rHere.m_tnY, tnX))
+-					goto error;
+-			}
+-		}
+-	}
+-
+-	// Loop through every point in the second input region, make sure
+-	// it's not in the result.
+-	for (itHereO = a_rOther.Begin();
+-		 itHereO != a_rOther.End();
+-		 ++itHereO)
+-	{
+-		const Extent &rHere = *itHere;
+-		for (tnX = rHere.m_tnXStart; tnX < rHere.m_tnXEnd; ++tnX)
+-		{
+-			if (a_rTemp.DoesContainPoint (rHere.m_tnY, tnX))
+-				goto error;
+-		}
+-	}
+-
+-	// The operation succeeded.  Commit it.
+-	Assign (a_reStatus, a_rTemp);
+-	if (a_reStatus != g_kNoError)
+-		return;
+-
+-	// All done.
+-	return;
+-
+-error:
+-	// Handle deviations.
+-	fprintf (stderr, "Region2D::Subtract() failed\n");
+-	fprintf (stderr, "First input region:\n");
+-	PrintRegion (*this);
+-	fprintf (stderr, "Second input region:\n");
+-	PrintRegion (a_rOther);
+-	fprintf (stderr, "Result:\n");
+-	PrintRegion (a_rTemp);
+-	assert (false);
+-}
+-
+-
+-
+ // Flood-fill the current region.
+ template <class INDEX, class SIZE>
+ template <class CONTROL>
+

diff --git a/media-video/mjpegtools/files/mjpegtools-2.2.1-lto.patch b/media-video/mjpegtools/files/mjpegtools-2.2.1-lto.patch
new file mode 100644
index 000000000000..b4cf1e14275f
--- /dev/null
+++ b/media-video/mjpegtools/files/mjpegtools-2.2.1-lto.patch
@@ -0,0 +1,24 @@
+https://sourceforge.net/p/mjpeg/bugs/143/
+https://bugs.gentoo.org/927103
+--- a/mpeg2enc/quantize_x86.c
++++ b/mpeg2enc/quantize_x86.c
+@@ -41,7 +41,7 @@
+ #include "quantize_precomp.h"
+ #include "quantize_ref.h"
+ 					
+-int quant_weight_coeff_sum_mmx (int16_t *blk, uint16_t *i_quant_mat );
++int32_t quant_weight_coeff_sum_mmx(int16_t *src, int16_t *i_quant_mat);
+ 
+ void iquantize_non_intra_m1_mmx(int16_t *src, int16_t *dst, uint16_t *qmat);
+ void iquantize_non_intra_m2_mmx(int16_t *src, int16_t *dst, uint16_t *qmat);
+--- a/lavtools/lav_io.c
++++ b/lavtools/lav_io.c
+@@ -34,7 +34,7 @@
+ #include <libdv/dv.h>
+ #endif
+
+-extern int AVI_errno;
++extern long int AVI_errno;
+
+ static char video_format=' ';
+ static int  internal_error=0;

diff --git a/media-video/mjpegtools/files/mjpegtools-2.2.1-puts-c99-configure.patch b/media-video/mjpegtools/files/mjpegtools-2.2.1-puts-c99-configure.patch
new file mode 100644
index 000000000000..6cbc92ee28ff
--- /dev/null
+++ b/media-video/mjpegtools/files/mjpegtools-2.2.1-puts-c99-configure.patch
@@ -0,0 +1,13 @@
+https://sourceforge.net/p/mjpeg/bugs/144/
+https://bugs.gentoo.org/899868
+--- a/configure.ac
++++ b/configure.ac
+@@ -236,7 +236,7 @@ dnl Check to see if __progname is provided by the system
+ dnl ********************************************************************
+ AC_CACHE_CHECK([for __progname],
+                [mjt_cv_extern___progname],
+-               [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
++               [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
+                                                 [[extern char *__progname;
+                                                   puts(__progname);]])],
+                                [mjt_cv_extern___progname=yes],

diff --git a/media-video/mjpegtools/mjpegtools-2.2.1-r1.ebuild b/media-video/mjpegtools/mjpegtools-2.2.1-r2.ebuild
similarity index 95%
rename from media-video/mjpegtools/mjpegtools-2.2.1-r1.ebuild
rename to media-video/mjpegtools/mjpegtools-2.2.1-r2.ebuild
index 501d8c0b77b0..71a254556311 100644
--- a/media-video/mjpegtools/mjpegtools-2.2.1-r1.ebuild
+++ b/media-video/mjpegtools/mjpegtools-2.2.1-r2.ebuild
@@ -42,6 +42,9 @@ src_prepare() {
 
 	eapply "${FILESDIR}/${P}-c++17-register-fix.patch"
 	eapply "${FILESDIR}/${P}-c++17-no-auto_ptr-fix.patch"
+	eapply "${FILESDIR}/${P}-gcc15-template.patch"
+	eapply "${FILESDIR}/${P}-lto.patch"
+	eapply "${FILESDIR}/${P}-puts-c99-configure.patch"
 
 	eautoreconf
 	sed -i -e '/ARCHFLAGS=/s:=.*:=:' configure


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2024-07-27 21:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-27 21:58 [gentoo-commits] repo/gentoo:master commit in: media-video/mjpegtools/files/, media-video/mjpegtools/ Sam James

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox