summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2024-07-27 22:57:44 +0100
committerSam James <sam@gentoo.org>2024-07-27 22:57:44 +0100
commit3f8de491a11fd52f6350c604247ebc0f630cab98 (patch)
tree5441fa01874754215b51e9e2cffe779ef59d37f9
parentsys-devel/gcc: add 13.3.1_p20240726 (diff)
downloadgentoo-3f8de491a11fd52f6350c604247ebc0f630cab98.tar.gz
gentoo-3f8de491a11fd52f6350c604247ebc0f630cab98.tar.bz2
gentoo-3f8de491a11fd52f6350c604247ebc0f630cab98.zip
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@gentoo.org>
-rw-r--r--media-video/mjpegtools/files/mjpegtools-2.2.1-gcc15-template.patch349
-rw-r--r--media-video/mjpegtools/files/mjpegtools-2.2.1-lto.patch24
-rw-r--r--media-video/mjpegtools/files/mjpegtools-2.2.1-puts-c99-configure.patch13
-rw-r--r--media-video/mjpegtools/mjpegtools-2.2.1-r2.ebuild (renamed from media-video/mjpegtools/mjpegtools-2.2.1-r1.ebuild)3
4 files changed, 389 insertions, 0 deletions
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
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