diff options
author | Francesco Riosa <vivo75@gmail.com> | 2021-08-11 18:09:18 +0300 |
---|---|---|
committer | Joonas Niilola <juippis@gentoo.org> | 2021-08-11 18:18:18 +0300 |
commit | 5e84258847804bd1073a078b1a5881accad9d2ee (patch) | |
tree | 62eaea7f9d65feb2fb9cc49f696e0607d96bd5e9 /media-gfx | |
parent | net-misc/freerdp: fix TestUnicodeConversion on big endian machines (diff) | |
download | gentoo-5e84258847804bd1073a078b1a5881accad9d2ee.tar.gz gentoo-5e84258847804bd1073a078b1a5881accad9d2ee.tar.bz2 gentoo-5e84258847804bd1073a078b1a5881accad9d2ee.zip |
media-gfx/rawtherapee: import some fedora patches to fix gcc:11 comp
GCC 11 in combination with glibc-2.34 braek overloading some functions
see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101747
Closes: https://bugs.gentoo.org/807658
Signed-off-by: Joonas Niilola <juippis@gentoo.org>
Diffstat (limited to 'media-gfx')
-rw-r--r-- | media-gfx/rawtherapee/files/RT_5.8_fix_crop.patch | 221 | ||||
-rw-r--r-- | media-gfx/rawtherapee/files/RT_5.8_glibc234.patch | 683 | ||||
-rw-r--r-- | media-gfx/rawtherapee/rawtherapee-5.8-r1.ebuild | 78 |
3 files changed, 982 insertions, 0 deletions
diff --git a/media-gfx/rawtherapee/files/RT_5.8_fix_crop.patch b/media-gfx/rawtherapee/files/RT_5.8_fix_crop.patch new file mode 100644 index 000000000000..24cbfdcb41db --- /dev/null +++ b/media-gfx/rawtherapee/files/RT_5.8_fix_crop.patch @@ -0,0 +1,221 @@ +From 15db8cdb57161d57af8307bf85aeda02ea69ddde Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fl=C3=B6ssie?= <floessie.mail@gmail.com> +Date: Sun, 5 Apr 2020 11:26:47 +0200 +Subject: [PATCH] Guard accesses to `Crop::crop_ratios` (#5701) + +--- + rtgui/crop.cc | 125 +++++++++++++++++++++++++++++++++++--------------- + rtgui/crop.h | 11 ++--- + 2 files changed, 92 insertions(+), 44 deletions(-) + +diff --git a/rtgui/crop.cc b/rtgui/crop.cc +index d9d496523..f092f07a5 100644 +--- a/rtgui/crop.cc ++++ b/rtgui/crop.cc +@@ -16,6 +16,8 @@ + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see <https://www.gnu.org/licenses/>. + */ ++#include <vector> ++ + #include "crop.h" + + #include "options.h" +@@ -46,39 +48,82 @@ inline void get_custom_ratio(int w, int h, double &rw, double &rh) + + } // namespace + ++class Crop::CropRatios final ++{ ++public: ++ CropRatios() : ++ ratios{ ++ {M("GENERAL_ASIMAGE"), 0.0}, ++ {M("GENERAL_CURRENT"), -1.0}, ++ {"3:2", 3.0 / 2.0}, // L1.5, P0.666... ++ {"4:3", 4.0 / 3.0}, // L1.333..., P0.75 ++ {"16:9", 16.0 / 9.0}, // L1.777..., P0.5625 ++ {"16:10", 16.0 / 10.0}, // L1.6, P0.625 ++ {"1:1", 1.0 / 1.0}, // L1, P1 ++ {"2:1", 2.0 / 1.0}, // L2, P0.5 ++ {"3:1", 3.0 / 1.0}, // L3, P0.333... ++ {"4:1", 4.0 / 1.0}, // L4, P0.25 ++ {"5:1", 5.0 / 1.0}, // L5, P0.2 ++ {"6:1", 6.0 / 1.0}, // L6, P0.1666... ++ {"7:1", 7.0 / 1.0}, // L7, P0.142... ++ {"4:5", 4.0 / 5.0}, // L1.25, P0.8 ++ {"5:7", 5.0 / 7.0}, // L1.4, P0.714... ++ {"6:7", 6.0 / 7.0}, // L1.166..., P0.857... ++ {"6:17", 6.0 / 17.0}, // L2.833..., P0.352... ++ {"24:65 - XPAN", 24.0 / 65.0}, // L2.708..., P0.369... ++ {"1.414 - DIN EN ISO 216", 1.414}, // L1.414, P0.707... ++ {"3.5:5", 3.5 / 5.0}, // L1.428..., P0.7 ++ {"8.5:11 - US Letter", 8.5 / 11.0}, // L1.294..., P0.772... ++ {"9.5:12", 9.5 / 12.0}, // L1.263..., P0.791... ++ {"10:12", 10.0 / 12.0}, // L1.2, P0.833... ++ {"11:14", 11.0 / 14.0}, // L1.272..., P0.785... ++ {"11:17 - Tabloid", 11.0 / 17.0}, // L1.545..., P0.647... ++ {"13:19", 13.0 / 19.0}, // L1.461..., P0.684... ++ {"17:22", 17.0 / 22.0}, // L1.294..., P0.772... ++ {"45:35 - ePassport", 45.0 / 35.0}, // L1.285,... P0.777... ++ {"64:27", 64.0 / 27.0}, // L2.370..., P0.421... ++ } ++ { ++ } ++ ++ std::vector<Glib::ustring> getLabels() const ++ { ++ std::vector<Glib::ustring> res; ++ ++ res.reserve(ratios.size()); ++ ++ for (const auto& ratio : ratios) { ++ res.push_back(ratio.label); ++ } ++ ++ return res; ++ } ++ ++ double getValue(std::size_t index) const ++ { ++ return ++ index < ratios.size() ++ ? ratios[index].value ++ : ratios[0].value; ++ } ++ ++ void updateCurrentRatio(double value) ++ { ++ ratios[1].value = value; ++ } ++ ++private: ++ struct CropRatio { ++ Glib::ustring label; ++ double value; ++ }; ++ ++ std::vector<CropRatio> ratios; ++}; ++ + Crop::Crop(): + FoldableToolPanel(this, "crop", M("TP_CROP_LABEL"), false, true), +- crop_ratios{ +- {M("GENERAL_ASIMAGE"), 0.0}, +- {M("GENERAL_CURRENT"), -1.0}, +- {"3:2", 3.0 / 2.0}, // L1.5, P0.666... +- {"4:3", 4.0 / 3.0}, // L1.333..., P0.75 +- {"16:9", 16.0 / 9.0}, // L1.777..., P0.5625 +- {"16:10", 16.0 / 10.0}, // L1.6, P0.625 +- {"1:1", 1.0 / 1.0}, // L1, P1 +- {"2:1", 2.0 / 1.0}, // L2, P0.5 +- {"3:1", 3.0 / 1.0}, // L3, P0.333... +- {"4:1", 4.0 / 1.0}, // L4, P0.25 +- {"5:1", 5.0 / 1.0}, // L5, P0.2 +- {"6:1", 6.0 / 1.0}, // L6, P0.1666... +- {"7:1", 7.0 / 1.0}, // L7, P0.142... +- {"4:5", 4.0 / 5.0}, // L1.25, P0.8 +- {"5:7", 5.0 / 7.0}, // L1.4, P0.714... +- {"6:7", 6.0 / 7.0}, // L1.166..., P0.857... +- {"6:17", 6.0 / 17.0}, // L2.833..., P0.352... +- {"24:65 - XPAN", 24.0 / 65.0}, // L2.708..., P0.369... +- {"1.414 - DIN EN ISO 216", 1.414}, // L1.414, P0.707... +- {"3.5:5", 3.5 / 5.0}, // L1.428..., P0.7 +- {"8.5:11 - US Letter", 8.5 / 11.0}, // L1.294..., P0.772... +- {"9.5:12", 9.5 / 12.0}, // L1.263..., P0.791... +- {"10:12", 10.0 / 12.0}, // L1.2, P0.833... +- {"11:14", 11.0 / 14.0}, // L1.272..., P0.785... +- {"11:17 - Tabloid", 11.0 / 17.0}, // L1.545..., P0.647... +- {"13:19", 13.0 / 19.0}, // L1.461..., P0.684... +- {"17:22", 17.0 / 22.0}, // L1.294..., P0.772... +- {"45:35 - ePassport", 45.0 / 35.0}, // L1.285,... P0.777... +- {"64:27", 64.0 / 27.0}, // L2.370..., P0.421... +- }, ++ crop_ratios(new CropRatios), + opt(0), + wDirty(true), + hDirty(true), +@@ -229,8 +274,8 @@ Crop::Crop(): + // ppigrid END + + // Populate the combobox +- for (const auto& crop_ratio : crop_ratios) { +- ratio->append (crop_ratio.label); ++ for (const auto& label : crop_ratios->getLabels()) { ++ ratio->append (label); + } + + ratio->set_active (0); +@@ -354,7 +399,10 @@ void Crop::read (const ProcParams* pp, const ParamsEdited* pedited) + setDimensions (pp->crop.x + pp->crop.w, pp->crop.y + pp->crop.h); + } + +- const bool flip_orientation = pp->crop.fixratio && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0; ++ const bool flip_orientation = ++ pp->crop.fixratio ++ && crop_ratios->getValue(ratio->get_active_row_number()) > 0 ++ && crop_ratios->getValue(ratio->get_active_row_number()) < 1.0; + + if (pp->crop.orientation == "Landscape") { + orientation->set_active (flip_orientation ? 1 : 0); +@@ -469,7 +517,10 @@ void Crop::write (ProcParams* pp, ParamsEdited* pedited) + } + + // for historical reasons we store orientation different if ratio is written as 2:3 instead of 3:2, but in GUI 'landscape' is always long side horizontal regardless of the ratio is written short or long side first. +- const bool flip_orientation = fixr->get_active() && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0; ++ const bool flip_orientation = ++ fixr->get_active() ++ && crop_ratios->getValue(ratio->get_active_row_number()) > 0 ++ && crop_ratios->getValue(ratio->get_active_row_number()) < 1.0; + + if (orientation->get_active_row_number() == 0) { + pp->crop.orientation = flip_orientation ? "Portrait" : "Landscape"; +@@ -1501,7 +1552,7 @@ double Crop::getRatio () const + return r; + } + +- r = crop_ratios[ratio->get_active_row_number()].value; ++ r = crop_ratios->getValue(ratio->get_active_row_number()); + if (!r) { + r = maxh <= maxw ? float(maxh)/float(maxw) : float(maxw)/float(maxh); + } +@@ -1539,5 +1590,5 @@ void Crop::updateCurrentRatio() + double rw, rh; + get_custom_ratio(w->get_value(), h->get_value(), rw, rh); + customRatioLabel->set_text(Glib::ustring::compose("%1:%2", rw, rh)); +- crop_ratios[1].value = double(w->get_value())/double(h->get_value()); ++ crop_ratios->updateCurrentRatio(static_cast<double>(w->get_value()) / static_cast<double>(h->get_value())); + } +diff --git a/rtgui/crop.h b/rtgui/crop.h +index b9221a803..c6636b917 100644 +--- a/rtgui/crop.h ++++ b/rtgui/crop.h +@@ -18,7 +18,7 @@ + */ + #pragma once + +-#include <vector> ++#include <memory> + + #include <gtkmm.h> + +@@ -91,16 +91,13 @@ class Crop final : + void rotateCrop (int deg, bool hflip, bool vflip); + + private: +- struct CropRatio { +- Glib::ustring label; +- double value; +- }; +- +- std::vector<CropRatio> crop_ratios; ++ class CropRatios; + + void adjustCropToRatio(); + void updateCurrentRatio(); + ++ const std::unique_ptr<CropRatios> crop_ratios; ++ + Gtk::CheckButton* fixr; + MyComboBoxText* ratio; + MyComboBoxText* orientation; diff --git a/media-gfx/rawtherapee/files/RT_5.8_glibc234.patch b/media-gfx/rawtherapee/files/RT_5.8_glibc234.patch new file mode 100644 index 000000000000..791183e20d52 --- /dev/null +++ b/media-gfx/rawtherapee/files/RT_5.8_glibc234.patch @@ -0,0 +1,683 @@ +diff -udHrN -- a/RT_5.8_glibc234.patch b/RT_5.8_glibc234.patch +--- a/RT_5.8_glibc234.patch 1970-01-01 01:00:00.000000000 +0100 ++++ b/RT_5.8_glibc234.patch 2021-08-04 18:50:22.142646367 +0200 +@@ -0,0 +1,334 @@ ++diff --git a/rtengine/canon_cr3_decoder.cc b/rtengine/canon_cr3_decoder.cc ++index ddd4b6172..1132b4e01 100644 ++--- a/rtengine/canon_cr3_decoder.cc +++++ b/rtengine/canon_cr3_decoder.cc ++@@ -670,7 +670,7 @@ std::uint32_t _byteswap_ulong(std::uint32_t x) ++ #endif ++ ++ struct LibRaw_abstract_datastream { ++- IMFILE* ifp; +++ rtengine::IMFILE* ifp; ++ ++ void lock() ++ { ++diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc ++index ef0b4e8dc..13a6b054a 100644 ++--- a/rtengine/dcraw.cc +++++ b/rtengine/dcraw.cc ++@@ -1963,7 +1963,7 @@ void CLASS phase_one_load_raw_c() ++ #endif ++ { ++ int len[2], pred[2]; ++- IMFILE ifpthr = *ifp; +++ rtengine::IMFILE ifpthr = *ifp; ++ ifpthr.plistener = nullptr; ++ ++ #ifdef _OPENMP ++@@ -3317,7 +3317,7 @@ void CLASS sony_arw2_load_raw() ++ { ++ uchar *data = new (std::nothrow) uchar[raw_width + 1]; ++ merror(data, "sony_arw2_load_raw()"); ++- IMFILE ifpthr = *ifp; +++ rtengine::IMFILE ifpthr = *ifp; ++ int pos = ifpthr.pos; ++ ushort pix[16]; ++ ++@@ -6331,7 +6331,7 @@ int CLASS parse_tiff_ifd (int base) ++ unsigned sony_curve[] = { 0,0,0,0,0,4095 }; ++ unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; ++ struct jhead jh; ++-/*RT*/ IMFILE *sfp; +++/*RT*/ rtengine::IMFILE *sfp; ++ /*RT*/ int pana_raw = 0; ++ ++ if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) ++@@ -6895,7 +6895,7 @@ it under the terms of the one of two licenses as you choose: ++ fread (buf, sony_length, 1, ifp); ++ sony_decrypt (buf, sony_length/4, 1, sony_key); ++ sfp = ifp; ++-/*RT*/ ifp = fopen (buf, sony_length); +++/*RT*/ ifp = rtengine::fopen (buf, sony_length); ++ // if ((ifp = tmpfile())) { ++ // fwrite (buf, sony_length, 1, ifp); ++ // fseek (ifp, 0, SEEK_SET); ++@@ -7203,7 +7203,7 @@ void CLASS parse_external_jpeg() ++ { ++ const char *file, *ext; ++ char *jname, *jfile, *jext; ++-/*RT*/ IMFILE *save=ifp; +++/*RT*/ rtengine::IMFILE *save=ifp; ++ ++ ext = strrchr (ifname, '.'); ++ file = strrchr (ifname, '/'); ++@@ -7231,7 +7231,7 @@ void CLASS parse_external_jpeg() ++ *jext = '0'; ++ } ++ if (strcmp (jname, ifname)) { ++-/*RT*/ if ((ifp = fopen (jname))) { +++/*RT*/ if ((ifp = rtengine::fopen (jname))) { ++ // if ((ifp = fopen (jname, "rb"))) { ++ if (verbose) ++ fprintf (stderr,_("Reading metadata from %s ...\n"), jname); ++diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h ++index 10c7b9ba6..bc009e67c 100644 ++--- a/rtengine/dcraw.h +++++ b/rtengine/dcraw.h ++@@ -73,7 +73,7 @@ public: ++ ++ protected: ++ int exif_base, ciff_base, ciff_len; ++- IMFILE *ifp; +++ rtengine::IMFILE *ifp; ++ FILE *ofp; ++ short order; ++ const char *ifname; ++@@ -125,7 +125,7 @@ protected: ++ int cur_buf_size; // buffer size ++ uchar *cur_buf; // currently read block ++ int fillbytes; // Counter to add extra byte for block size N*16 ++- IMFILE *input; +++ rtengine::IMFILE *input; ++ struct int_pair grad_even[3][41]; // tables of gradients ++ struct int_pair grad_odd[3][41]; ++ ushort *linealloc; ++@@ -278,7 +278,7 @@ void parse_redcine(); ++ class getbithuff_t ++ { ++ public: ++- getbithuff_t(DCraw *p,IMFILE *&i, unsigned &z):parent(p),bitbuf(0),vbits(0),reset(0),ifp(i),zero_after_ff(z){} +++ getbithuff_t(DCraw *p,rtengine::IMFILE *&i, unsigned &z):parent(p),bitbuf(0),vbits(0),reset(0),ifp(i),zero_after_ff(z){} ++ unsigned operator()(int nbits, ushort *huff); ++ ++ private: ++@@ -288,7 +288,7 @@ private: ++ DCraw *parent; ++ unsigned bitbuf; ++ int vbits, reset; ++- IMFILE *&ifp; +++ rtengine::IMFILE *&ifp; ++ unsigned &zero_after_ff; ++ }; ++ getbithuff_t getbithuff; ++@@ -296,7 +296,7 @@ getbithuff_t getbithuff; ++ class nikbithuff_t ++ { ++ public: ++- explicit nikbithuff_t(IMFILE *&i):bitbuf(0),errors(0),vbits(0),ifp(i){} +++ explicit nikbithuff_t(rtengine::IMFILE *&i):bitbuf(0),errors(0),vbits(0),ifp(i){} ++ void operator()() {bitbuf = vbits = 0;}; ++ unsigned operator()(int nbits, ushort *huff); ++ unsigned errorCount() { return errors; } ++@@ -309,7 +309,7 @@ private: ++ } ++ unsigned bitbuf, errors; ++ int vbits; ++- IMFILE *&ifp; +++ rtengine::IMFILE *&ifp; ++ }; ++ nikbithuff_t nikbithuff; ++ ++@@ -377,7 +377,7 @@ void parse_qt (int end); ++ // ph1_bithuff(int nbits, ushort *huff); ++ class ph1_bithuff_t { ++ public: ++- ph1_bithuff_t(DCraw *p, IMFILE *i, short &o):order(o),ifp(i),bitbuf(0),vbits(0){} +++ ph1_bithuff_t(DCraw *p, rtengine::IMFILE *i, short &o):order(o),ifp(i),bitbuf(0),vbits(0){} ++ unsigned operator()(int nbits, ushort *huff); ++ unsigned operator()(int nbits); ++ unsigned operator()(); ++@@ -411,7 +411,7 @@ private: ++ } ++ ++ short ℴ ++- IMFILE* const ifp; +++ rtengine::IMFILE* const ifp; ++ UINT64 bitbuf; ++ int vbits; ++ }; ++@@ -429,11 +429,11 @@ void nokia_load_raw(); ++ ++ class pana_bits_t{ ++ public: ++- pana_bits_t(IMFILE *i, unsigned &u, unsigned enc): +++ pana_bits_t(rtengine::IMFILE *i, unsigned &u, unsigned enc): ++ ifp(i), load_flags(u), vbits(0), encoding(enc) {} ++ unsigned operator()(int nbits, unsigned *bytes=nullptr); ++ private: ++- IMFILE *ifp; +++ rtengine::IMFILE *ifp; ++ unsigned &load_flags; ++ uchar buf[0x4000]; ++ int vbits; ++diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc ++index 7dde668eb..e551c9aad 100644 ++--- a/rtengine/dfmanager.cc +++++ b/rtengine/dfmanager.cc ++@@ -540,7 +540,7 @@ std::vector<badPix> *DFManager::getHotPixels ( const std::string &mak, const std ++ ++ int DFManager::scanBadPixelsFile( Glib::ustring filename ) ++ { ++- FILE *file = fopen( filename.c_str(), "r" ); +++ FILE *file = ::fopen( filename.c_str(), "r" ); ++ ++ if( !file ) { ++ return false; ++diff --git a/rtengine/myfile.cc b/rtengine/myfile.cc ++index 842766dcf..2321d18bb 100644 ++--- a/rtengine/myfile.cc +++++ b/rtengine/myfile.cc ++@@ -70,7 +70,7 @@ int munmap(void *start, size_t length) ++ ++ #ifdef MYFILE_MMAP ++ ++-IMFILE* fopen (const char* fname) +++rtengine::IMFILE* rtengine::fopen (const char* fname) ++ { ++ int fd; ++ ++@@ -123,13 +123,13 @@ IMFILE* fopen (const char* fname) ++ return mf; ++ } ++ ++-IMFILE* gfopen (const char* fname) +++rtengine::IMFILE* rtengine::gfopen (const char* fname) ++ { ++ return fopen(fname); ++ } ++ #else ++ ++-IMFILE* fopen (const char* fname) +++rtengine::IMFILE* rtengine::fopen (const char* fname) ++ { ++ ++ FILE* f = g_fopen (fname, "rb"); ++@@ -152,7 +152,7 @@ IMFILE* fopen (const char* fname) ++ return mf; ++ } ++ ++-IMFILE* gfopen (const char* fname) +++rtengine::IMFILE* rtengine::gfopen (const char* fname) ++ { ++ ++ FILE* f = g_fopen (fname, "rb"); ++@@ -176,7 +176,7 @@ IMFILE* gfopen (const char* fname) ++ } ++ #endif //MYFILE_MMAP ++ ++-IMFILE* fopen (unsigned* buf, int size) +++rtengine::IMFILE* rtengine::fopen (unsigned* buf, int size) ++ { ++ ++ IMFILE* mf = new IMFILE; ++@@ -190,7 +190,7 @@ IMFILE* fopen (unsigned* buf, int size) ++ return mf; ++ } ++ ++-void fclose (IMFILE* f) +++void rtengine::fclose (IMFILE* f) ++ { ++ #ifdef MYFILE_MMAP ++ ++@@ -207,7 +207,7 @@ void fclose (IMFILE* f) ++ delete f; ++ } ++ ++-int fscanf (IMFILE* f, const char* s ...) +++int rtengine::fscanf (IMFILE* f, const char* s ...) ++ { ++ // fscanf not easily wrapped since we have no terminating \0 at end ++ // of file data and vsscanf() won't tell us how many characters that ++@@ -253,7 +253,7 @@ int fscanf (IMFILE* f, const char* s ...) ++ } ++ ++ ++-char* fgets (char* s, int n, IMFILE* f) +++char* rtengine::fgets (char* s, int n, IMFILE* f) ++ { ++ ++ if (f->pos >= f->size) { ++@@ -270,7 +270,7 @@ char* fgets (char* s, int n, IMFILE* f) ++ return s; ++ } ++ ++-void imfile_set_plistener(IMFILE *f, rtengine::ProgressListener *plistener, double progress_range) +++void rtengine::imfile_set_plistener(IMFILE *f, rtengine::ProgressListener *plistener, double progress_range) ++ { ++ f->plistener = plistener; ++ f->progress_range = progress_range; ++@@ -278,7 +278,7 @@ void imfile_set_plistener(IMFILE *f, rtengine::ProgressListener *plistener, doub ++ f->progress_current = 0; ++ } ++ ++-void imfile_update_progress(IMFILE *f) +++void rtengine::imfile_update_progress(IMFILE *f) ++ { ++ if (!f->plistener || f->progress_current < f->progress_next) { ++ return; ++diff --git a/rtengine/myfile.h b/rtengine/myfile.h ++index 34b90c525..ae14ce31a 100644 ++--- a/rtengine/myfile.h +++++ b/rtengine/myfile.h ++@@ -30,8 +30,6 @@ namespace rtengine ++ ++ class ProgressListener; ++ ++-} ++- ++ struct IMFILE { ++ int fd; ++ ssize_t pos; ++@@ -141,3 +139,5 @@ inline unsigned char* fdata(int offset, IMFILE* f) ++ ++ int fscanf (IMFILE* f, const char* s ...); ++ char* fgets (char* s, int n, IMFILE* f); +++ +++} ++diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc ++index 8dc998862..cf500474f 100644 ++--- a/rtengine/rtthumbnail.cc +++++ b/rtengine/rtthumbnail.cc ++@@ -1965,7 +1965,7 @@ bool Thumbnail::writeImage (const Glib::ustring& fname) ++ ++ Glib::ustring fullFName = fname + ".rtti"; ++ ++- FILE* f = g_fopen (fullFName.c_str (), "wb"); +++ FILE* f = ::g_fopen (fullFName.c_str (), "wb"); ++ ++ if (!f) { ++ return false; ++@@ -2008,7 +2008,7 @@ bool Thumbnail::readImage (const Glib::ustring& fname) ++ return false; ++ } ++ ++- FILE* f = g_fopen(fullFName.c_str (), "rb"); +++ FILE* f = ::g_fopen(fullFName.c_str (), "rb"); ++ ++ if (!f) { ++ return false; ++@@ -2239,7 +2239,7 @@ bool Thumbnail::writeData (const Glib::ustring& fname) ++ return false; ++ } ++ ++- FILE *f = g_fopen (fname.c_str (), "wt"); +++ FILE *f = ::g_fopen (fname.c_str (), "wt"); ++ ++ if (!f) { ++ if (settings->verbose) { ++@@ -2262,7 +2262,7 @@ bool Thumbnail::readEmbProfile (const Glib::ustring& fname) ++ embProfile = nullptr; ++ embProfileLength = 0; ++ ++- FILE* f = g_fopen (fname.c_str (), "rb"); +++ FILE* f = ::g_fopen (fname.c_str (), "rb"); ++ ++ if (f) { ++ if (!fseek (f, 0, SEEK_END)) { ++@@ -2290,7 +2290,7 @@ bool Thumbnail::writeEmbProfile (const Glib::ustring& fname) ++ { ++ ++ if (embProfileData) { ++- FILE* f = g_fopen (fname.c_str (), "wb"); +++ FILE* f = ::g_fopen (fname.c_str (), "wb"); ++ ++ if (f) { ++ fwrite (embProfileData, 1, embProfileLength, f); +diff -udHrN -- a/rtengine/canon_cr3_decoder.cc b/rtengine/canon_cr3_decoder.cc +--- a/rtengine/canon_cr3_decoder.cc 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/canon_cr3_decoder.cc 2021-08-07 11:43:50.725202017 +0200 +@@ -662,7 +662,7 @@ + #endif + + struct LibRaw_abstract_datastream { +- IMFILE* ifp; ++ rtengine::IMFILE* ifp; + + void lock() + { +diff -udHrN -- a/rtengine/dcraw.cc b/rtengine/dcraw.cc +--- a/rtengine/dcraw.cc 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/dcraw.cc 2021-08-07 11:43:50.736202141 +0200 +@@ -2025,7 +2025,7 @@ + #endif + { + int len[2], pred[2]; +- IMFILE ifpthr = *ifp; ++ rtengine::IMFILE ifpthr = *ifp; + ifpthr.plistener = nullptr; + + #ifdef _OPENMP +@@ -3380,7 +3380,7 @@ + { + uchar *data = new (std::nothrow) uchar[raw_width + 1]; + merror(data, "sony_arw2_load_raw()"); +- IMFILE ifpthr = *ifp; ++ rtengine::IMFILE ifpthr = *ifp; + int pos = ifpthr.pos; + ushort pix[16]; + +@@ -6394,7 +6394,7 @@ + unsigned sony_curve[] = { 0,0,0,0,0,4095 }; + unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; + struct jhead jh; +-/*RT*/ IMFILE *sfp; ++/*RT*/ rtengine::IMFILE *sfp; + /*RT*/ int pana_raw = 0; + + if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) +@@ -6958,7 +6958,7 @@ + fread (buf, sony_length, 1, ifp); + sony_decrypt (buf, sony_length/4, 1, sony_key); + sfp = ifp; +-/*RT*/ ifp = fopen (buf, sony_length); ++/*RT*/ ifp = rtengine::fopen (buf, sony_length); + // if ((ifp = tmpfile())) { + // fwrite (buf, sony_length, 1, ifp); + // fseek (ifp, 0, SEEK_SET); +@@ -7264,7 +7264,7 @@ + { + const char *file, *ext; + char *jname, *jfile, *jext; +-/*RT*/ IMFILE *save=ifp; ++/*RT*/ rtengine::IMFILE *save=ifp; + + ext = strrchr (ifname, '.'); + file = strrchr (ifname, '/'); +@@ -7292,7 +7292,7 @@ + *jext = '0'; + } + if (strcmp (jname, ifname)) { +-/*RT*/ if ((ifp = fopen (jname))) { ++/*RT*/ if ((ifp = rtengine::fopen (jname))) { + // if ((ifp = fopen (jname, "rb"))) { + if (verbose) + fprintf (stderr,_("Reading metadata from %s ...\n"), jname); +diff -udHrN -- a/rtengine/dcraw.h b/rtengine/dcraw.h +--- a/rtengine/dcraw.h 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/dcraw.h 2021-08-07 11:43:50.737202152 +0200 +@@ -73,7 +73,7 @@ + + protected: + int exif_base, ciff_base, ciff_len; +- IMFILE *ifp; ++ rtengine::IMFILE *ifp; + FILE *ofp; + short order; + const char *ifname; +@@ -125,7 +125,7 @@ + int cur_buf_size; // buffer size + uchar *cur_buf; // currently read block + int fillbytes; // Counter to add extra byte for block size N*16 +- IMFILE *input; ++ rtengine::IMFILE *input; + struct int_pair grad_even[3][41]; // tables of gradients + struct int_pair grad_odd[3][41]; + ushort *linealloc; +@@ -278,7 +278,7 @@ + class getbithuff_t + { + public: +- getbithuff_t(DCraw *p,IMFILE *&i, unsigned &z):parent(p),bitbuf(0),vbits(0),reset(0),ifp(i),zero_after_ff(z){} ++ getbithuff_t(DCraw *p,rtengine::IMFILE *&i, unsigned &z):parent(p),bitbuf(0),vbits(0),reset(0),ifp(i),zero_after_ff(z){} + unsigned operator()(int nbits, ushort *huff); + + private: +@@ -288,7 +288,7 @@ + DCraw *parent; + unsigned bitbuf; + int vbits, reset; +- IMFILE *&ifp; ++ rtengine::IMFILE *&ifp; + unsigned &zero_after_ff; + }; + getbithuff_t getbithuff; +@@ -296,7 +296,7 @@ + class nikbithuff_t + { + public: +- explicit nikbithuff_t(IMFILE *&i):bitbuf(0),errors(0),vbits(0),ifp(i){} ++ explicit nikbithuff_t(rtengine::IMFILE *&i):bitbuf(0),errors(0),vbits(0),ifp(i){} + void operator()() {bitbuf = vbits = 0;}; + unsigned operator()(int nbits, ushort *huff); + unsigned errorCount() { return errors; } +@@ -309,7 +309,7 @@ + } + unsigned bitbuf, errors; + int vbits; +- IMFILE *&ifp; ++ rtengine::IMFILE *&ifp; + }; + nikbithuff_t nikbithuff; + +@@ -378,7 +378,7 @@ + // ph1_bithuff(int nbits, ushort *huff); + class ph1_bithuff_t { + public: +- ph1_bithuff_t(DCraw *p, IMFILE *i, short &o):order(o),ifp(i),bitbuf(0),vbits(0){} ++ ph1_bithuff_t(DCraw *p, rtengine::IMFILE *i, short &o):order(o),ifp(i),bitbuf(0),vbits(0){} + unsigned operator()(int nbits, ushort *huff); + unsigned operator()(int nbits); + unsigned operator()(); +@@ -412,7 +412,7 @@ + } + + short ℴ +- IMFILE* const ifp; ++ rtengine::IMFILE* const ifp; + UINT64 bitbuf; + int vbits; + }; +@@ -430,11 +430,11 @@ + + class pana_bits_t{ + public: +- pana_bits_t(IMFILE *i, unsigned &u, unsigned enc): ++ pana_bits_t(rtengine::IMFILE *i, unsigned &u, unsigned enc): + ifp(i), load_flags(u), vbits(0), encoding(enc) {} + unsigned operator()(int nbits, unsigned *bytes=nullptr); + private: +- IMFILE *ifp; ++ rtengine::IMFILE *ifp; + unsigned &load_flags; + uchar buf[0x4000]; + int vbits; +diff -udHrN -- a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc +--- a/rtengine/dfmanager.cc 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/dfmanager.cc 2021-08-07 11:43:50.738202163 +0200 +@@ -540,7 +540,7 @@ + + int DFManager::scanBadPixelsFile( Glib::ustring filename ) + { +- FILE *file = fopen( filename.c_str(), "r" ); ++ FILE *file = ::fopen( filename.c_str(), "r" ); + + if( !file ) { + return false; +diff -udHrN -- a/rtengine/myfile.cc b/rtengine/myfile.cc +--- a/rtengine/myfile.cc 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/myfile.cc 2021-08-07 11:43:50.738202163 +0200 +@@ -70,7 +70,7 @@ + + #ifdef MYFILE_MMAP + +-IMFILE* fopen (const char* fname) ++rtengine::IMFILE* rtengine::fopen (const char* fname) + { + int fd; + +@@ -123,13 +123,13 @@ + return mf; + } + +-IMFILE* gfopen (const char* fname) ++rtengine::IMFILE* rtengine::gfopen (const char* fname) + { + return fopen(fname); + } + #else + +-IMFILE* fopen (const char* fname) ++rtengine::IMFILE* rtengine::fopen (const char* fname) + { + + FILE* f = g_fopen (fname, "rb"); +@@ -152,7 +152,7 @@ + return mf; + } + +-IMFILE* gfopen (const char* fname) ++rtengine::IMFILE* rtengine::gfopen (const char* fname) + { + + FILE* f = g_fopen (fname, "rb"); +@@ -176,7 +176,7 @@ + } + #endif //MYFILE_MMAP + +-IMFILE* fopen (unsigned* buf, int size) ++rtengine::IMFILE* rtengine::fopen (unsigned* buf, int size) + { + + IMFILE* mf = new IMFILE; +@@ -190,7 +190,7 @@ + return mf; + } + +-void fclose (IMFILE* f) ++void rtengine::fclose (IMFILE* f) + { + #ifdef MYFILE_MMAP + +@@ -207,7 +207,7 @@ + delete f; + } + +-int fscanf (IMFILE* f, const char* s ...) ++int rtengine::fscanf (IMFILE* f, const char* s ...) + { + // fscanf not easily wrapped since we have no terminating \0 at end + // of file data and vsscanf() won't tell us how many characters that +@@ -253,7 +253,7 @@ + } + + +-char* fgets (char* s, int n, IMFILE* f) ++char* rtengine::fgets (char* s, int n, IMFILE* f) + { + + if (f->pos >= f->size) { +@@ -270,7 +270,7 @@ + return s; + } + +-void imfile_set_plistener(IMFILE *f, rtengine::ProgressListener *plistener, double progress_range) ++void rtengine::imfile_set_plistener(IMFILE *f, rtengine::ProgressListener *plistener, double progress_range) + { + f->plistener = plistener; + f->progress_range = progress_range; +@@ -278,7 +278,7 @@ + f->progress_current = 0; + } + +-void imfile_update_progress(IMFILE *f) ++void rtengine::imfile_update_progress(IMFILE *f) + { + if (!f->plistener || f->progress_current < f->progress_next) { + return; +diff -udHrN -- a/rtengine/myfile.h b/rtengine/myfile.h +--- a/rtengine/myfile.h 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/myfile.h 2021-08-07 11:43:50.739202175 +0200 +@@ -30,8 +30,6 @@ + + class ProgressListener; + +-} +- + struct IMFILE { + int fd; + ssize_t pos; +@@ -141,3 +139,5 @@ + + int fscanf (IMFILE* f, const char* s ...); + char* fgets (char* s, int n, IMFILE* f); ++ ++} +diff -udHrN -- a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc +--- a/rtengine/rtthumbnail.cc 2020-02-04 07:39:52.000000000 +0100 ++++ b/rtengine/rtthumbnail.cc 2021-08-07 12:02:02.091503230 +0200 +@@ -1922,7 +1922,7 @@ + + Glib::ustring fullFName = fname + ".rtti"; + +- FILE* f = g_fopen (fullFName.c_str (), "wb"); ++ FILE* f = ::g_fopen (fullFName.c_str (), "wb"); + + if (!f) { + return false; +@@ -1965,7 +1965,7 @@ + return false; + } + +- FILE* f = g_fopen(fullFName.c_str (), "rb"); ++ FILE* f = ::g_fopen(fullFName.c_str (), "rb"); + + if (!f) { + return false; +@@ -2191,7 +2191,7 @@ + return false; + } + +- FILE *f = g_fopen (fname.c_str (), "wt"); ++ FILE *f = ::g_fopen (fname.c_str (), "wt"); + + if (!f) { + if (settings->verbose) { +@@ -2214,7 +2214,7 @@ + embProfile = nullptr; + embProfileLength = 0; + +- FILE* f = g_fopen (fname.c_str (), "rb"); ++ FILE* f = ::g_fopen (fname.c_str (), "rb"); + + if (f) { + if (!fseek (f, 0, SEEK_END)) { +@@ -2242,7 +2242,7 @@ + { + + if (embProfileData) { +- FILE* f = g_fopen (fname.c_str (), "wb"); ++ FILE* f = ::g_fopen (fname.c_str (), "wb"); + + if (f) { + fwrite (embProfileData, 1, embProfileLength, f); +@@ -2257,7 +2257,7 @@ + bool Thumbnail::readAEHistogram (const Glib::ustring& fname) + { + +- FILE* f = g_fopen(fname.c_str(), "rb"); ++ FILE* f = ::g_fopen(fname.c_str(), "rb"); + + if (!f) { + aeHistogram.reset(); +@@ -2280,7 +2280,7 @@ + { + + if (aeHistogram) { +- FILE* f = g_fopen (fname.c_str (), "wb"); ++ FILE* f = ::g_fopen (fname.c_str (), "wb"); + + if (f) { + fwrite (&aeHistogram[0], 1, (65536 >> aeHistCompression)*sizeof (aeHistogram[0]), f); diff --git a/media-gfx/rawtherapee/rawtherapee-5.8-r1.ebuild b/media-gfx/rawtherapee/rawtherapee-5.8-r1.ebuild new file mode 100644 index 000000000000..8d30e2bd5ad1 --- /dev/null +++ b/media-gfx/rawtherapee/rawtherapee-5.8-r1.ebuild @@ -0,0 +1,78 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +MY_P=${P/_rc/-rc} +inherit cmake flag-o-matic toolchain-funcs xdg-utils + +DESCRIPTION="A powerful cross-platform raw image processing program" +HOMEPAGE="https://www.rawtherapee.com/" +SRC_URI="https://rawtherapee.com/shared/source/${MY_P}.tar.xz" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="amd64 x86" +IUSE="openmp tcmalloc" + +RDEPEND=" + dev-libs/expat + dev-libs/libsigc++:2 + media-libs/lcms:2 + media-libs/lensfun + media-libs/libcanberra[gtk3] + media-libs/libiptcdata + media-libs/libpng:0= + media-libs/tiff:0 + sci-libs/fftw:3.0= + sys-libs/zlib + virtual/jpeg:0 + x11-libs/gtk+:3 + tcmalloc? ( dev-util/google-perftools )" +DEPEND="${RDEPEND} + dev-cpp/gtkmm:3.0 + gnome-base/librsvg" +BDEPEND="virtual/pkgconfig" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/RT_5.8_fix_crop.patch" + "${FILESDIR}/RT_5.8_glibc234.patch" +) + +pkg_pretend() { + if use openmp ; then + tc-has-openmp || die "Please switch to an openmp compatible compiler" + fi +} + +src_configure() { + # upstream tested that "fast-math" give wrong results, so filter it + # https://bugs.gentoo.org/show_bug.cgi?id=606896#c2 + filter-flags -ffast-math + # -Ofast enable "fast-math" both in gcc and clang + replace-flags -Ofast -O3 + # In case we add an ebuild for klt we can (i)use that one, + # see http://cecas.clemson.edu/~stb/klt/ + local mycmakeargs=( + -DOPTION_OMP=$(usex openmp) + -DDOCDIR=/usr/share/doc/${PF} + -DCREDITSDIR=/usr/share/${PN} + -DLICENCEDIR=/usr/share/${PN} + -DCACHE_NAME_SUFFIX="" + -DWITH_SYSTEM_KLT="off" + -DENABLE_TCMALLOC=$(usex tcmalloc) + ) + cmake_src_configure +} + +pkg_postinst() { + xdg_icon_cache_update + xdg_desktop_database_update +} + +pkg_postrm() { + xdg_icon_cache_update + xdg_desktop_database_update +} |