diff options
author | Sam James <sam@gentoo.org> | 2024-07-27 22:57:44 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2024-07-27 22:57:44 +0100 |
commit | 3f8de491a11fd52f6350c604247ebc0f630cab98 (patch) | |
tree | 5441fa01874754215b51e9e2cffe779ef59d37f9 /media-video | |
parent | sys-devel/gcc: add 13.3.1_p20240726 (diff) | |
download | gentoo-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>
Diffstat (limited to 'media-video')
-rw-r--r-- | media-video/mjpegtools/files/mjpegtools-2.2.1-gcc15-template.patch | 349 | ||||
-rw-r--r-- | media-video/mjpegtools/files/mjpegtools-2.2.1-lto.patch | 24 | ||||
-rw-r--r-- | media-video/mjpegtools/files/mjpegtools-2.2.1-puts-c99-configure.patch | 13 | ||||
-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 |