git: 229b2f86274a - main - graphics/darktable: Update to 4.4.1
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 17 Jul 2023 17:12:44 UTC
The branch main has been updated by dumbbell: URL: https://cgit.FreeBSD.org/ports/commit/?id=229b2f86274a443876fdb8a9497109a18a459d66 commit 229b2f86274a443876fdb8a9497109a18a459d66 Author: Jean-Sébastien Pédron <dumbbell@FreeBSD.org> AuthorDate: 2023-07-06 21:45:50 +0000 Commit: Jean-Sébastien Pédron <dumbbell@FreeBSD.org> CommitDate: 2023-07-17 17:08:49 +0000 graphics/darktable: Update to 4.4.1 Release notes: * https://github.com/darktable-org/darktable/releases/tag/release-4.4.0 * https://github.com/darktable-org/darktable/releases/tag/release-4.4.1 Support for MIDI devices is currently turned off even though it probably works just fine. The port already has many options that make it complicated enough. If there is demand for MIDI devices, I will add the option. --- graphics/darktable/Makefile | 6 +- graphics/darktable/distinfo | 6 +- .../files/patch-cmake_modules_FindOpenEXR.cmake | 12 - graphics/darktable/files/patch-src_CMakeLists.txt | 8 +- graphics/darktable/files/patch-src_common_exif.cc | 681 --------------------- .../darktable/files/patch-src_common_iop__order.c | 8 +- .../files/patch-src_common_iop__profile.c | 10 +- ...external_rawspeed_cmake_Modules_CheckZLIB.cmake | 4 +- .../files/patch-src_iop_channelmixerrgb.c | 14 +- graphics/darktable/files/patch-src_iop_filmicrgb.c | 24 - .../darktable/files/patch-src_iop_negadoctor.c | 20 - graphics/darktable/pkg-plist | 7 +- 12 files changed, 31 insertions(+), 769 deletions(-) diff --git a/graphics/darktable/Makefile b/graphics/darktable/Makefile index 51fd37b7704c..2ed7e5048ac8 100644 --- a/graphics/darktable/Makefile +++ b/graphics/darktable/Makefile @@ -1,6 +1,6 @@ PORTNAME= darktable -PORTVERSION= 4.2.1 -PORTREVISION= 7 +PORTVERSION= 4.4.1 +PORTREVISION= CATEGORIES= graphics MASTER_SITES= https://github.com/darktable-org/${PORTNAME}/releases/download/release-${PORTVERSION:C/\.rc/rc/}/ @@ -55,7 +55,7 @@ SHEBANG_FILES= tools/*.sh USE_GCC= yes -CMAKE_ARGS+= -DBINARY_PACKAGE_BUILD=1 +CMAKE_ARGS+= -DBINARY_PACKAGE_BUILD=1 -DUSE_PORTMIDI:BOOL=OFF CMAKE_BOOL+= BUILD_CMSTEST USE_AVIF USE_CAMERA_SUPPORT USE_HEIF \ USE_KWALLET USE_LUA USE_MAP USE_OPENEXR USE_OPENJPEG \ diff --git a/graphics/darktable/distinfo b/graphics/darktable/distinfo index a00ee4d07d09..f31d4f176deb 100644 --- a/graphics/darktable/distinfo +++ b/graphics/darktable/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1677140992 -SHA256 (darktable-4.2.1.tar.xz) = 603a39c6074291a601f7feb16ebb453fd0c5b02a6f5d3c7ab6db612eadc97bac -SIZE (darktable-4.2.1.tar.xz) = 6112480 +TIMESTAMP = 1688678181 +SHA256 (darktable-4.4.1.tar.xz) = e043d38d2e8adb67af7690b12b535a40e8ec7bea05cfa8684db8b21a626e0f0d +SIZE (darktable-4.4.1.tar.xz) = 5956860 diff --git a/graphics/darktable/files/patch-cmake_modules_FindOpenEXR.cmake b/graphics/darktable/files/patch-cmake_modules_FindOpenEXR.cmake deleted file mode 100644 index 15b262b00c30..000000000000 --- a/graphics/darktable/files/patch-cmake_modules_FindOpenEXR.cmake +++ /dev/null @@ -1,12 +0,0 @@ ---- cmake/modules/FindOpenEXR.cmake.orig 2021-02-03 13:36:49 UTC -+++ cmake/modules/FindOpenEXR.cmake -@@ -24,9 +24,6 @@ find_path(_OPENEXR_LIB_DIR OpenEXR - set(OpenEXR_LIB_DIR ${_OPENEXR_LIB_DIR}) - mark_as_advanced(OpenEXR_LIB_DIR) - --find_library(_OPENEXR_LIBRARY_IMIMF IlmImf -- HINTS ENV OPENEXR_LIB_DIR) --set(OpenEXR_LIBRARY ${OpenEXR_LIBRARY} ${_OPENEXR_LIBRARY_IMIMF}) - find_library(_OPENEXR_LIBRARY_IMATH Imath - HINTS ENV OPENEXR_LIB_DIR) - set(OpenEXR_LIBRARY ${OpenEXR_LIBRARY} ${_OPENEXR_LIBRARY_IMATH}) diff --git a/graphics/darktable/files/patch-src_CMakeLists.txt b/graphics/darktable/files/patch-src_CMakeLists.txt index 11a76410ad01..e67d581b6a58 100644 --- a/graphics/darktable/files/patch-src_CMakeLists.txt +++ b/graphics/darktable/files/patch-src_CMakeLists.txt @@ -1,11 +1,11 @@ ---- src/CMakeLists.txt.orig 2021-04-29 21:04:27 UTC +--- src/CMakeLists.txt.orig 2023-06-30 06:13:18 UTC +++ src/CMakeLists.txt -@@ -388,7 +393,7 @@ if(USE_OPENJPEG) +@@ -465,7 +465,7 @@ if(USE_OPENJPEG) add_definitions("-DHAVE_OPENJPEG") - list(APPEND SOURCES "common/imageio_j2k.c") + list(APPEND SOURCES "imageio/imageio_j2k.c") - include_directories(SYSTEM ${OpenJPEG_INCLUDE_DIRS}) + include_directories(BEFORE SYSTEM ${OpenJPEG_INCLUDE_DIRS}) list(APPEND LIBS ${OpenJPEG_LIBRARIES}) + set(DT_SUPPORTED_EXTENSIONS ${DT_SUPPORTED_EXTENSIONS} j2c j2k jp2 jpc CACHE INTERNAL "") endif(OpenJPEG_FOUND) - endif(USE_OPENJPEG) diff --git a/graphics/darktable/files/patch-src_common_exif.cc b/graphics/darktable/files/patch-src_common_exif.cc deleted file mode 100644 index 39815e93621e..000000000000 --- a/graphics/darktable/files/patch-src_common_exif.cc +++ /dev/null @@ -1,681 +0,0 @@ ---- src/common/exif.cc.orig 2023-02-15 16:52:33 UTC -+++ src/common/exif.cc -@@ -287,7 +287,7 @@ void dt_exif_set_exiv2_taglist() - _get_xmp_tags("expressionmedia", &exiv2_taglist); - _get_xmp_tags("MicrosoftPhoto", &exiv2_taglist); - } -- catch (Exiv2::AnyError& e) -+ catch (Exiv2::Error& e) - { - std::string s(e.what()); - std::cerr << "[exiv2 taglist] " << s << std::endl; -@@ -408,7 +408,7 @@ static void dt_remove_exif_keys(Exiv2::ExifData &exif, - while((pos = exif.findKey(Exiv2::ExifKey(keys[i]))) != exif.end()) - exif.erase(pos); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - // the only exception we may get is "invalid" tag, which is not - // important enough to either stop the function, or even display -@@ -428,7 +428,7 @@ static void dt_remove_xmp_keys(Exiv2::XmpData &xmp, co - while((pos = xmp.findKey(Exiv2::XmpKey(keys[i]))) != xmp.end()) - xmp.erase(pos); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - // the only exception we may get is "invalid" tag, which is not - // important enough to either stop the function, or even display -@@ -444,7 +444,7 @@ static bool dt_exif_read_xmp_tag(Exiv2::XmpData &xmpDa - { - return (*pos = xmpData.findKey(Exiv2::XmpKey(key))) != xmpData.end() && (*pos)->size(); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 read_xmp_tag] " << s << std::endl; -@@ -513,7 +513,7 @@ static bool _exif_decode_xmp_data(dt_image_t *img, Exi - - if(FIND_XMP_TAG("Xmp.xmp.Rating")) - { -- const int stars = pos->toLong(); -+ const int stars = pos->toInt64(); - dt_image_set_xmp_rating(img, stars); - } - else -@@ -541,7 +541,7 @@ static bool _exif_decode_xmp_data(dt_image_t *img, Exi - const int cnt = pos->count(); - for(int i = 0; i < cnt; i++) - { -- dt_colorlabels_set_label(img->id, pos->toLong(i)); -+ dt_colorlabels_set_label(img->id, pos->toInt64(i)); - } - } - -@@ -610,7 +610,7 @@ static bool _exif_decode_xmp_data(dt_image_t *img, Exi - imgs = NULL; - return true; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - if(imgs) g_list_free(imgs); - imgs = NULL; -@@ -626,7 +626,7 @@ static bool dt_exif_read_iptc_tag(Exiv2::IptcData &ipt - { - return (*pos = iptcData.findKey(Exiv2::IptcKey(key))) != iptcData.end() && (*pos)->size(); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 read_iptc_tag] " << s << std::endl; -@@ -684,7 +684,7 @@ static bool _exif_decode_iptc_data(dt_image_t *img, Ex - - return true; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 _exif_decode_iptc_data] " << img->filename << ": " << s << std::endl; -@@ -698,7 +698,7 @@ static bool _exif_read_exif_tag(Exiv2::ExifData &exifD - { - return (*pos = exifData.findKey(Exiv2::ExifKey(key))) != exifData.end() && (*pos)->size(); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 read_exif_tag] " << s << std::endl; -@@ -761,17 +761,17 @@ static gboolean _check_lens_correction_data(Exiv2::Exi - && _exif_read_exif_tag(exifData, &posv, "Exif.SubImage1.VignettingCorrParams")) - { - // Validate -- const int nc = posd->toLong(0); -- if(nc <= 16 && 2*nc == posc->toLong(0) && nc == posv->toLong(0)) -+ const int nc = posd->toInt64(0); -+ if(nc <= 16 && 2*nc == posc->toInt64(0) && nc == posv->toInt64(0)) - { - img->exif_correction_type = CORRECTION_TYPE_SONY; - img->exif_correction_data.sony.nc = nc; - for(int i = 0; i < nc; i++) - { -- img->exif_correction_data.sony.distortion[i] = posd->toLong(i + 1); -- img->exif_correction_data.sony.ca_r[i] = posc->toLong(i + 1); -- img->exif_correction_data.sony.ca_b[i] = posc->toLong(nc + i + 1); -- img->exif_correction_data.sony.vignetting[i] = posv->toLong(i + 1); -+ img->exif_correction_data.sony.distortion[i] = posd->toInt64(i + 1); -+ img->exif_correction_data.sony.ca_r[i] = posc->toInt64(i + 1); -+ img->exif_correction_data.sony.ca_b[i] = posc->toInt64(nc + i + 1); -+ img->exif_correction_data.sony.vignetting[i] = posv->toInt64(i + 1); - } - } - } -@@ -807,7 +807,7 @@ static gboolean _check_lens_correction_data(Exiv2::Exi - } - - // Account for the 1.25x crop modes in some Fuji cameras -- if(FIND_EXIF_TAG("Exif.Fujifilm.CropMode") && (pos->toLong() == 2 || pos->toLong() == 4)) -+ if(FIND_EXIF_TAG("Exif.Fujifilm.CropMode") && (pos->toInt64() == 2 || pos->toInt64() == 4)) - img->exif_correction_data.fuji.cropf = 1.25f; - else - img->exif_correction_data.fuji.cropf = 1; -@@ -833,7 +833,7 @@ void dt_exif_img_check_additional_tags(dt_image_t *img - } - return; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 reading DefaultUserCrop] " << filename << ": " << s << std::endl; -@@ -1110,11 +1110,11 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - */ - if(FIND_EXIF_TAG("Exif.Image.Orientation")) - { -- img->orientation = dt_image_orientation_to_flip_bits(pos->toLong()); -+ img->orientation = dt_image_orientation_to_flip_bits(pos->toInt64()); - } - else if(FIND_EXIF_TAG("Exif.PanasonicRaw.Orientation")) - { -- img->orientation = dt_image_orientation_to_flip_bits(pos->toLong()); -+ img->orientation = dt_image_orientation_to_flip_bits(pos->toInt64()); - } - - /* read gps location */ -@@ -1163,9 +1163,9 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - - /* Read lens name */ - if((FIND_EXIF_TAG("Exif.CanonCs.LensType") -- && pos->toLong() != 61182 // prefer the other tag for RF lenses -- && pos->toLong() != 0 -- && pos->toLong() != 65535) -+ && pos->toInt64() != 61182 // prefer the other tag for RF lenses -+ && pos->toInt64() != 0 -+ && pos->toInt64() != 65535) - || FIND_EXIF_TAG("Exif.Canon.LensModel")) - { - dt_strlcpy_to_utf8(img->exif_lens, sizeof(img->exif_lens), pos, exifData); -@@ -1203,7 +1203,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - fprintf(stderr, "[exif] Warning: lens \"%s\" unknown as \"%s\"\n", img->exif_lens, lens.c_str()); - } - } -- else if(Exiv2::testVersion(0,27,4) && FIND_EXIF_TAG("Exif.NikonLd4.LensID") && pos->toLong() == 0) -+ else if(Exiv2::testVersion(0,27,4) && FIND_EXIF_TAG("Exif.NikonLd4.LensID") && pos->toInt64() == 0) - { - /* Z body w/ FTZ adapter or recent F body (e.g. D780, D6) detected. - * Prioritize the legacy ID lookup instead of Exif.Photo.LensModel included -@@ -1295,12 +1295,12 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - { - if(FIND_EXIF_TAG("Exif.Image.Rating")) - { -- const int stars = pos->toLong(); -+ const int stars = pos->toInt64(); - dt_image_set_xmp_rating(img, stars); - } - else if(FIND_EXIF_TAG("Exif.Image.RatingPercent")) - { -- const int stars = pos->toLong() * 5. / 100; -+ const int stars = pos->toInt64() * 5. / 100; - dt_image_set_xmp_rating(img, stars); - } - else -@@ -1355,7 +1355,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - { - for(int i = 0; i < 9; i++) colmatrix[0][i] = cm1_pos->toFloat(i); - -- if(FIND_EXIF_TAG("Exif.Image.CalibrationIlluminant1")) illu[0] = (dt_dng_illuminant_t) pos->toLong(); -+ if(FIND_EXIF_TAG("Exif.Image.CalibrationIlluminant1")) illu[0] = (dt_dng_illuminant_t) pos->toInt64(); - } - - Exiv2::ExifData::const_iterator cm2_pos = exifData.findKey(Exiv2::ExifKey("Exif.Image.ColorMatrix2")); -@@ -1363,7 +1363,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - { - for(int i = 0; i < 9; i++) colmatrix[1][i] = cm2_pos->toFloat(i); - -- if(FIND_EXIF_TAG("Exif.Image.CalibrationIlluminant2")) illu[1] = (dt_dng_illuminant_t) pos->toLong(); -+ if(FIND_EXIF_TAG("Exif.Image.CalibrationIlluminant2")) illu[1] = (dt_dng_illuminant_t) pos->toInt64(); - } - - // So far the Exif.Image.CalibrationIlluminant3 tag and friends have not been implemented and there are no images to test -@@ -1373,7 +1373,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - { - for(int i = 0; i < 9; i++) colmatrix[2][i] = cm3_pos->toFloat(i); - -- if(FIND_EXIF_TAG("Exif.Image.CalibrationIlluminant3")) illu[2] = (dt_dng_illuminant_t) pos->toLong(); -+ if(FIND_EXIF_TAG("Exif.Image.CalibrationIlluminant3")) illu[2] = (dt_dng_illuminant_t) pos->toInt64(); - } - #endif - -@@ -1494,18 +1494,18 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - int phi = 0; - - if(FIND_EXIF_TAG("Exif.SubImage1.SampleFormat")) -- format = pos->toLong(); -+ format = pos->toInt64(); - else if(FIND_EXIF_TAG("Exif.Image.SampleFormat")) -- format = pos->toLong(); -+ format = pos->toInt64(); - - if(FIND_EXIF_TAG("Exif.SubImage1.BitsPerSample")) -- bps = pos->toLong(); -+ bps = pos->toInt64(); - - if(FIND_EXIF_TAG("Exif.SubImage1.SamplesPerPixel")) -- spp = pos->toLong(); -+ spp = pos->toInt64(); - - if(FIND_EXIF_TAG("Exif.SubImage1.PhotometricInterpretation")) -- phi = pos->toLong(); -+ phi = pos->toInt64(); - - if((format == 3) && (bps >= 16) && (((spp == 1) && (phi == 32803)) || ((spp == 3) && (phi == 34892)))) is_hdr = TRUE; - if((format == 1) && (bps == 16) && (spp == 1) && (phi == 34892)) is_monochrome = TRUE; -@@ -1528,7 +1528,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - // + Exif.Iop.InteroperabilityIndex of 'R98' -> sRGB - if(dt_image_is_ldr(img) && FIND_EXIF_TAG("Exif.Photo.ColorSpace")) - { -- int colorspace = pos->toLong(); -+ int colorspace = pos->toInt64(); - if(colorspace == 0x01) - img->colorspace = DT_IMAGE_COLORSPACE_SRGB; - else if(colorspace == 0x02) -@@ -1547,7 +1547,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - } - - // Improve lens detection for Sony SAL lenses. -- if(FIND_EXIF_TAG("Exif.Sony2.LensID") && pos->toLong() != 65535 && pos->print().find('|') == std::string::npos) -+ if(FIND_EXIF_TAG("Exif.Sony2.LensID") && pos->toInt64() != 65535 && pos->print().find('|') == std::string::npos) - { - dt_strlcpy_to_utf8(img->exif_lens, sizeof(img->exif_lens), pos, exifData); - } -@@ -1569,7 +1569,7 @@ static bool _exif_decode_exif_data(dt_image_t *img, Ex - img->exif_inited = 1; - return true; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 _exif_decode_exif_data] " << img->filename << ": " << s << std::endl; -@@ -1645,7 +1645,7 @@ int dt_exif_read_from_blob(dt_image_t *img, uint8_t *b - dt_exif_apply_default_metadata(img); - return res ? 0 : 1; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 dt_exif_read_from_blob] " << img->filename << ": " << s << std::endl; -@@ -1696,7 +1696,7 @@ int dt_exif_get_thumbnail(const char *path, uint8_t ** - - return 0; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 dt_exif_get_thumbnail] " << path << ": " << s << std::endl; -@@ -1765,7 +1765,7 @@ int dt_exif_read(dt_image_t *img, const char *path) - - return res ? 0 : 1; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 dt_exif_read] " << path << ": " << s << std::endl; -@@ -1822,7 +1822,7 @@ int dt_exif_write_blob(uint8_t *blob, uint32_t size, c - imgExifData.sortByTag(); - image->writeMetadata(); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 dt_exif_write_blob] " << path << ": " << s << std::endl; -@@ -2151,7 +2151,7 @@ int dt_exif_read_blob(uint8_t **buf, const char *path, - memcpy(*buf, &(blob[0]), length); - return length; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - // std::cerr.rdbuf(savecerr); - std::string s(e.what()); -@@ -2662,16 +2662,16 @@ static GList *read_history_v2(Exiv2::XmpData &xmpData, - } - else if(g_str_has_prefix(key_iter, "darktable:num")) - { -- current_entry->num = history->value().toLong(); -+ current_entry->num = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:enabled")) - { -- current_entry->enabled = history->value().toLong() == 1; -+ current_entry->enabled = history->value().toInt64() == 1; - } - else if(g_str_has_prefix(key_iter, "darktable:modversion")) - { - current_entry->have_modversion = TRUE; -- current_entry->modversion = history->value().toLong(); -+ current_entry->modversion = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:params")) - { -@@ -2685,7 +2685,7 @@ static GList *read_history_v2(Exiv2::XmpData &xmpData, - } - else if(g_str_has_prefix(key_iter, "darktable:multi_priority")) - { -- current_entry->multi_priority = history->value().toLong(); -+ current_entry->multi_priority = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:iop_order")) - { -@@ -2698,7 +2698,7 @@ static GList *read_history_v2(Exiv2::XmpData &xmpData, - } - else if(g_str_has_prefix(key_iter, "darktable:blendop_version")) - { -- current_entry->blendop_version = history->value().toLong(); -+ current_entry->blendop_version = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:blendop_params")) - { -@@ -2772,22 +2772,22 @@ static GHashTable *read_masks(Exiv2::XmpData &xmpData, - mask_entry_t *entry = (mask_entry_t *)calloc(1, sizeof(mask_entry_t)); - - entry->version = version; -- entry->mask_id = mask_id->toLong(i); -- entry->mask_type = mask_type->toLong(i); -+ entry->mask_id = mask_id->toInt64(i); -+ entry->mask_type = mask_type->toInt64(i); - std::string mask_name_str = mask_name->toString(i); - if(mask_name_str.c_str() != NULL) - entry->mask_name = g_strdup(mask_name_str.c_str()); - else - entry->mask_name = g_strdup("form"); - -- entry->mask_version = mask_version->toLong(i); -+ entry->mask_version = mask_version->toInt64(i); - - std::string mask_str = mask->toString(i); - const char *mask_c = mask_str.c_str(); - const size_t mask_c_len = strlen(mask_c); - entry->mask_points = dt_exif_xmp_decode(mask_c, mask_c_len, &entry->mask_points_len); - -- entry->mask_nb = mask_nb->toLong(i); -+ entry->mask_nb = mask_nb->toInt64(i); - - std::string mask_src_str = mask_src->toString(i); - const char *mask_src_c = mask_src_str.c_str(); -@@ -2858,15 +2858,15 @@ static GList *read_masks_v3(Exiv2::XmpData &xmpData, c - // go on reading things into current_entry - if(g_str_has_prefix(key_iter, "darktable:mask_num")) - { -- current_entry->mask_num = history->value().toLong(); -+ current_entry->mask_num = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:mask_id")) - { -- current_entry->mask_id = history->value().toLong(); -+ current_entry->mask_id = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:mask_type")) - { -- current_entry->mask_type = history->value().toLong(); -+ current_entry->mask_type = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:mask_name")) - { -@@ -2874,7 +2874,7 @@ static GList *read_masks_v3(Exiv2::XmpData &xmpData, c - } - else if(g_str_has_prefix(key_iter, "darktable:mask_version")) - { -- current_entry->mask_version = history->value().toLong(); -+ current_entry->mask_version = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:mask_points")) - { -@@ -2882,7 +2882,7 @@ static GList *read_masks_v3(Exiv2::XmpData &xmpData, c - } - else if(g_str_has_prefix(key_iter, "darktable:mask_nb")) - { -- current_entry->mask_nb = history->value().toLong(); -+ current_entry->mask_nb = history->value().toInt64(); - } - else if(g_str_has_prefix(key_iter, "darktable:mask_src")) - { -@@ -3034,7 +3034,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - - int num_masks = 0; - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.xmp_version"))) != xmpData.end()) -- xmp_version = pos->toLong(); -+ xmp_version = pos->toInt64(); - - if(!history_only) - { -@@ -3052,7 +3052,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - int32_t in; - dt_image_raw_parameters_t out; - } raw_params; -- raw_params.in = pos->toLong(); -+ raw_params.in = pos->toInt64(); - const int32_t user_flip = raw_params.out.user_flip; - img->legacy_flip.user_flip = user_flip; - img->legacy_flip.legacy = 0; -@@ -3062,7 +3062,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.auto_presets_applied"))) != xmpData.end()) - { -- preset_applied = pos->toLong(); -+ preset_applied = pos->toInt64(); - - // in any case, this is no legacy image. - img->flags |= DT_IMAGE_NO_LEGACY_PRESETS; -@@ -3085,7 +3085,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - { - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.iop_order_version"))) != xmpData.end()) - { -- iop_order_version = (dt_iop_order_t)pos->toLong(); -+ iop_order_version = (dt_iop_order_t)pos->toInt64(); - } - - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.iop_order_list"))) != xmpData.end()) -@@ -3103,7 +3103,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - { - // All iop-order version before 3 are legacy one. Starting with version 3 we have the first - // attempts to propose the final v3 iop-order. -- iop_order_version = pos->toLong() < 3 ? DT_IOP_ORDER_LEGACY : DT_IOP_ORDER_V30; -+ iop_order_version = pos->toInt64() < 3 ? DT_IOP_ORDER_LEGACY : DT_IOP_ORDER_V30; - iop_order_list = dt_ioppr_get_iop_order_list_version(iop_order_version); - } - else -@@ -3355,7 +3355,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - // we shouldn't change history_end when no history was read! - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.history_end"))) != xmpData.end() && num > 0) - { -- int history_end = MIN(pos->toLong(), num); -+ int history_end = MIN(pos->toInt64(), num); - if(num_masks > 0) history_end++; - if((history_end < 1) && preset_applied) preset_applied = -1; - DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), -@@ -3471,7 +3471,7 @@ int dt_exif_xmp_read(dt_image_t *img, const char *file - } - - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - // actually nobody's interested in that if the file doesn't exist: - // std::string s(e.what()); -@@ -3677,23 +3677,23 @@ void read_xmp_timestamps(Exiv2::XmpData &xmpData, dt_i - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.change_timestamp"))) != xmpData.end()) - { - if(xmp_version > 5) -- img->change_timestamp = pos->toLong(); -- else if(pos->toLong() >= 1) -- img->change_timestamp = _convert_unix_to_gtimespan(pos->toLong()); -+ img->change_timestamp = pos->toInt64(); -+ else if(pos->toInt64() >= 1) -+ img->change_timestamp = _convert_unix_to_gtimespan(pos->toInt64()); - } - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.export_timestamp"))) != xmpData.end()) - { - if(xmp_version > 5) -- img->export_timestamp = pos->toLong(); -- else if(pos->toLong() >= 1) -- img->export_timestamp = _convert_unix_to_gtimespan(pos->toLong()); -+ img->export_timestamp = pos->toInt64(); -+ else if(pos->toInt64() >= 1) -+ img->export_timestamp = _convert_unix_to_gtimespan(pos->toInt64()); - } - if((pos = xmpData.findKey(Exiv2::XmpKey("Xmp.darktable.print_timestamp"))) != xmpData.end()) - { - if(xmp_version > 5) -- img->print_timestamp = pos->toLong(); -- else if(pos->toLong() >= 1) -- img->print_timestamp = _convert_unix_to_gtimespan(pos->toLong()); -+ img->print_timestamp = pos->toInt64(); -+ else if(pos->toInt64() >= 1) -+ img->print_timestamp = _convert_unix_to_gtimespan(pos->toInt64()); - } - } - -@@ -4060,7 +4060,7 @@ char *dt_exif_xmp_read_string(const int imgid) - std::string xmpPacket; - - Exiv2::DataBuf buf = Exiv2::readFile(WIDEN(input_filename)); -- xmpPacket.assign(reinterpret_cast<char *>(buf.pData_), buf.size_); -+ xmpPacket.assign(reinterpret_cast<const char *>(buf.c_data()), buf.size()); - Exiv2::XmpParser::decode(xmpData, xmpPacket); - // because XmpSeq or XmpBag are added to the list, we first have - // to remove these so that we don't end up with a string of duplicates -@@ -4076,7 +4076,7 @@ char *dt_exif_xmp_read_string(const int imgid) - std::string xmpPacket; - - Exiv2::DataBuf buf = Exiv2::readFile(WIDEN(input_filename)); -- xmpPacket.assign(reinterpret_cast<char *>(buf.pData_), buf.size_); -+ xmpPacket.assign(reinterpret_cast<const char *>(buf.c_data()), buf.size()); - Exiv2::XmpParser::decode(sidecarXmpData, xmpPacket); - - for(Exiv2::XmpData::const_iterator it = sidecarXmpData.begin(); it != sidecarXmpData.end(); ++it) -@@ -4098,7 +4098,7 @@ char *dt_exif_xmp_read_string(const int imgid) - } - return g_strdup(xmpPacket.c_str()); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::cerr << "[xmp_read_blob] caught exiv2 exception '" << e << "'\n"; - return NULL; -@@ -4113,7 +4113,7 @@ static void dt_remove_xmp_key(Exiv2::XmpData &xmp, con - if(pos != xmp.end()) - xmp.erase(pos); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - } - } -@@ -4131,7 +4131,7 @@ static void _remove_xmp_keys(Exiv2::XmpData &xmpData, - ++i; - } - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - } - } -@@ -4144,7 +4144,7 @@ static void dt_remove_exif_key(Exiv2::ExifData &exif, - if(pos != exif.end()) - exif.erase(pos); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - } - } -@@ -4157,7 +4157,7 @@ static void dt_remove_iptc_key(Exiv2::IptcData &iptc, - while((pos = iptc.findKey(Exiv2::IptcKey(key))) != iptc.end()) - iptc.erase(pos); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - } - } -@@ -4188,7 +4188,7 @@ int dt_exif_xmp_attach_export(const int imgid, const c - img->setXmpData(input_image->xmpData()); - } - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::cerr << "[xmp_attach] " << input_filename << ": caught exiv2 exception '" << e << "'\n"; - } -@@ -4204,7 +4204,7 @@ int dt_exif_xmp_attach_export(const int imgid, const c - std::string xmpPacket; - - Exiv2::DataBuf buf = Exiv2::readFile(WIDEN(input_filename)); -- xmpPacket.assign(reinterpret_cast<char *>(buf.pData_), buf.size_); -+ xmpPacket.assign(reinterpret_cast<const char *>(buf.c_data()), buf.size()); - Exiv2::XmpParser::decode(sidecarXmpData, xmpPacket); - - for(Exiv2::XmpData::const_iterator it = sidecarXmpData.begin(); it != sidecarXmpData.end(); ++it) -@@ -4368,10 +4368,10 @@ int dt_exif_xmp_attach_export(const int imgid, const c - { - img->writeMetadata(); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - #if EXIV2_TEST_VERSION(0,27,0) -- if(e.code() == Exiv2::kerTooLargeJpegSegment) -+ if(e.code() == Exiv2::ErrorCode::kerTooLargeJpegSegment) - #else - if(e.code() == 37) - #endif -@@ -4384,7 +4384,7 @@ int dt_exif_xmp_attach_export(const int imgid, const c - { - img->writeMetadata(); - } -- catch(Exiv2::AnyError &e2) -+ catch(Exiv2::Error &e2) - { - std::cerr << "[dt_exif_xmp_attach_export] without history " << filename << ": caught exiv2 exception '" << e2 << "'\n"; - return -1; -@@ -4395,7 +4395,7 @@ int dt_exif_xmp_attach_export(const int imgid, const c - } - return 0; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::cerr << "[dt_exif_xmp_attach_export] " << filename << ": caught exiv2 exception '" << e << "'\n"; - return -1; -@@ -4437,7 +4437,7 @@ int dt_exif_xmp_write(const int imgid, const char *fil - } - - Exiv2::DataBuf buf = Exiv2::readFile(WIDEN(filename)); -- xmpPacket.assign(reinterpret_cast<char *>(buf.pData_), buf.size_); -+ xmpPacket.assign(reinterpret_cast<const char *>(buf.c_data()), buf.size()); - Exiv2::XmpParser::decode(xmpData, xmpPacket); - // because XmpSeq or XmpBag are added to the list, we first have - // to remove these so that we don't end up with a string of duplicates -@@ -4492,7 +4492,7 @@ int dt_exif_xmp_write(const int imgid, const char *fil - - return 0; - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::cerr << "[dt_exif_xmp_write] " << filename << ": caught exiv2 exception '" << e << "'\n"; - return -1; -@@ -4515,7 +4515,7 @@ dt_colorspaces_color_profile_type_t dt_exif_get_color_ - // clang-format on - if((pos = exifData.findKey(Exiv2::ExifKey("Exif.Photo.ColorSpace"))) != exifData.end() && pos->size()) - { -- int colorspace = pos->toLong(); -+ int colorspace = pos->toInt64(); - if(colorspace == 0x01) - return DT_COLORSPACE_SRGB; - else if(colorspace == 0x02) -@@ -4536,7 +4536,7 @@ dt_colorspaces_color_profile_type_t dt_exif_get_color_ - - return DT_COLORSPACE_DISPLAY; // nothing embedded - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 dt_exif_get_color_space] " << s << std::endl; -@@ -4556,7 +4556,7 @@ void dt_exif_get_basic_data(const uint8_t *data, size_ - _find_datetime_taken(exifData, pos, basic_exif->datetime); - _find_exif_makermodel(exifData, pos, basic_exif); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - std::string s(e.what()); - std::cerr << "[exiv2 dt_exif_get_basic_data] " << s << std::endl; -@@ -4590,7 +4590,7 @@ void dt_exif_init() - { - Exiv2::XmpProperties::propertyList("lr"); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - // if lightroom is not known register it - Exiv2::XmpProperties::registerNs("http://ns.adobe.com/lightroom/1.0/", "lr"); -@@ -4599,7 +4599,7 @@ void dt_exif_init() - { - Exiv2::XmpProperties::propertyList("exifEX"); - } -- catch(Exiv2::AnyError &e) -+ catch(Exiv2::Error &e) - { - // if exifEX is not known register it - Exiv2::XmpProperties::registerNs("http://cipa.jp/exif/1.0/", "exifEX"); diff --git a/graphics/darktable/files/patch-src_common_iop__order.c b/graphics/darktable/files/patch-src_common_iop__order.c index a9d9238e7156..6a9b39d2270e 100644 --- a/graphics/darktable/files/patch-src_common_iop__order.c +++ b/graphics/darktable/files/patch-src_common_iop__order.c @@ -1,11 +1,11 @@ ---- src/common/iop_order.c.orig 2023-01-26 22:08:42 UTC +--- src/common/iop_order.c.orig 2023-07-06 21:18:18 UTC +++ src/common/iop_order.c -@@ -36,23 +36,6 @@ static void _ioppr_reset_iop_order(GList *iop_order_li +@@ -37,23 +37,6 @@ static void _ioppr_reset_iop_order(GList *iop_order_li static void _ioppr_reset_iop_order(GList *iop_order_list); --/** Note : -- * we do not use finite-math-only and fast-math because divisions by zero are not manually avoided in the code +-/** Note : we do not use finite-math-only and fast-math because +- * divisions by zero are not manually avoided in the code - * fp-contract=fast enables hardware-accelerated Fused Multiply-Add - * the rest is loop reorganization and vectorization optimization - **/ diff --git a/graphics/darktable/files/patch-src_common_iop__profile.c b/graphics/darktable/files/patch-src_common_iop__profile.c index 86ede0dec073..b11b42bf2d6b 100644 --- a/graphics/darktable/files/patch-src_common_iop__profile.c +++ b/graphics/darktable/files/patch-src_common_iop__profile.c @@ -1,11 +1,11 @@ ---- src/common/iop_profile.c.orig 2023-01-26 22:13:13 UTC +--- src/common/iop_profile.c.orig 2023-07-06 21:19:34 UTC +++ src/common/iop_profile.c -@@ -32,24 +32,6 @@ +@@ -34,24 +34,6 @@ #include <stdlib.h> #include <string.h> --/** Note : -- * we do not use finite-math-only and fast-math because divisions by zero are not manually avoided in the code +-/** Note : we do not use finite-math-only and fast-math because +- * divisions by zero are not manually avoided in the code - * fp-contract=fast enables hardware-accelerated Fused Multiply-Add - * the rest is loop reorganization and vectorization optimization - **/ @@ -24,4 +24,4 @@ - static void _mark_as_nonmatrix_profile(dt_iop_order_iccprofile_info_t *const profile_info) { - profile_info->matrix_in[0][0] = NAN; + dt_mark_colormatrix_invalid(&profile_info->matrix_in[0][0]); diff --git a/graphics/darktable/files/patch-src_external_rawspeed_cmake_Modules_CheckZLIB.cmake b/graphics/darktable/files/patch-src_external_rawspeed_cmake_Modules_CheckZLIB.cmake index b0328cf3b878..87a338e088cc 100644 --- a/graphics/darktable/files/patch-src_external_rawspeed_cmake_Modules_CheckZLIB.cmake +++ b/graphics/darktable/files/patch-src_external_rawspeed_cmake_Modules_CheckZLIB.cmake @@ -1,6 +1,6 @@ ---- src/external/rawspeed/cmake/Modules/CheckZLIB.cmake.orig 2020-04-03 21:02:54 UTC +--- src/external/rawspeed/cmake/Modules/CheckZLIB.cmake.orig 2023-06-12 21:39:40 UTC +++ src/external/rawspeed/cmake/Modules/CheckZLIB.cmake -@@ -40,7 +40,7 @@ endif() +@@ -44,7 +44,7 @@ CHECK_PROTOTYPE_DEFINITION(zError CHECK_PROTOTYPE_DEFINITION(zError "const char* zError(int zErrorCode)" "NULL" diff --git a/graphics/darktable/files/patch-src_iop_channelmixerrgb.c b/graphics/darktable/files/patch-src_iop_channelmixerrgb.c index a16cc77221d5..e202f067cba4 100644 --- a/graphics/darktable/files/patch-src_iop_channelmixerrgb.c +++ b/graphics/darktable/files/patch-src_iop_channelmixerrgb.c @@ -1,8 +1,8 @@ ---- src/iop/channelmixerrgb.c.orig 2023-01-27 09:33:55 UTC +--- src/iop/channelmixerrgb.c.orig 2023-07-06 21:20:42 UTC +++ src/iop/channelmixerrgb.c -@@ -49,23 +49,6 @@ DT_MODULE_INTROSPECTION(3, dt_iop_channelmixer_rgb_par - - DT_MODULE_INTROSPECTION(3, dt_iop_channelmixer_rgb_params_t) +@@ -16,23 +16,6 @@ + along with darktable. If not, see <http://www.gnu.org/licenses/>. + */ -/** Note : - * we use finite-math-only and fast-math because divisions by zero are manually avoided in the code @@ -21,6 +21,6 @@ - "tree-vectorize", "no-math-errno") -#endif - - - #define CHANNEL_SIZE 4 - #define INVERSE_SQRT_3 0.5773502691896258f + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif diff --git a/graphics/darktable/files/patch-src_iop_filmicrgb.c b/graphics/darktable/files/patch-src_iop_filmicrgb.c deleted file mode 100644 index 40e16290108b..000000000000 --- a/graphics/darktable/files/patch-src_iop_filmicrgb.c +++ /dev/null @@ -1,24 +0,0 @@ ---- src/iop/filmicrgb.c.orig 2023-01-27 09:19:36 UTC -+++ src/iop/filmicrgb.c -@@ -94,21 +94,6 @@ DT_MODULE_INTROSPECTION(6, dt_iop_filmicrgb_params_t) - * */ - - --/** Note : -- * we use finite-math-only and fast-math because divisions by zero are manually avoided in the code -- * fp-contract=fast enables hardware-accelerated Fused Multiply-Add -- * the rest is loop reorganization and vectorization optimization -- **/ --#if defined(__GNUC__) --#pragma GCC optimize("unroll-loops", "tree-loop-if-convert", "tree-loop-distribution", "no-strict-aliasing", \ -- "loop-interchange", "loop-nest-optimize", "tree-loop-im", "unswitch-loops", \ -- "tree-loop-ivcanon", "ira-loop-pressure", "split-ivs-in-unroller", \ -- "variable-expansion-in-unroller", "split-loops", "ivopts", "predictive-commoning", \ -- "tree-loop-linear", "loop-block", "loop-strip-mine", "finite-math-only", "fp-contract=fast", \ -- "fast-math", "no-math-errno") --#endif -- -- - typedef enum dt_iop_filmicrgb_methods_type_t - { - DT_FILMIC_METHOD_NONE = 0, // $DESCRIPTION: "no" diff --git a/graphics/darktable/files/patch-src_iop_negadoctor.c b/graphics/darktable/files/patch-src_iop_negadoctor.c deleted file mode 100644 index 6b27db770ffb..000000000000 --- a/graphics/darktable/files/patch-src_iop_negadoctor.c +++ /dev/null @@ -1,20 +0,0 @@ ---- src/iop/negadoctor.c.orig 2023-01-27 09:34:21 UTC -+++ src/iop/negadoctor.c -@@ -40,17 +40,6 @@ - #include <math.h> - #include <stdlib.h> - --#if defined(__GNUC__) --#pragma GCC optimize ("unroll-loops", "tree-loop-if-convert", \ -- "tree-loop-distribution", "no-strict-aliasing", \ -- "loop-interchange", "loop-nest-optimize", "tree-loop-im", \ -- "unswitch-loops", "tree-loop-ivcanon", "ira-loop-pressure", \ -- "split-ivs-in-unroller", "variable-expansion-in-unroller", \ -- "split-loops", "ivopts", "predictive-commoning",\ -- "tree-loop-linear", "loop-block", "loop-strip-mine", \ -- "finite-math-only", "fp-contract=fast", "fast-math") --#endif -- - /** DOCUMENTATION - * - * This module allows to invert scanned negatives and simulate their print on paper, based on Kodak Cineon diff --git a/graphics/darktable/pkg-plist b/graphics/darktable/pkg-plist index 7c3ba588c1c2..068f25a79cfa 100644 --- a/graphics/darktable/pkg-plist +++ b/graphics/darktable/pkg-plist @@ -226,6 +226,7 @@ share/applications/org.darktable.darktable.desktop %%NO_OPENCL%%%%DATADIR%%/kernels/rgbcurve.cl %%NO_OPENCL%%%%DATADIR%%/kernels/rgblevels.cl %%NO_OPENCL%%%%DATADIR%%/kernels/sharpen.cl +%%NO_OPENCL%%%%DATADIR%%/kernels/sigmoid.cl %%NO_OPENCL%%%%DATADIR%%/kernels/soften.cl %%DATADIR%%/latex/photobook.cls %%DATADIR%%/lua/darktable/debug.lua @@ -391,6 +392,7 @@ share/applications/org.darktable.darktable.desktop %%DATADIR%%/tools/purge_non_existing_images.sh %%DATADIR%%/tools/purge_unused_tags.sh %%DATADIR%%/watermarks/darktable.svg +%%DATADIR%%/watermarks/fixed-size-text.svg %%DATADIR%%/watermarks/hasselblad.svg %%DATADIR%%/watermarks/metadata-template.svg %%DATADIR%%/watermarks/promo.svg @@ -412,22 +414,19 @@ share/icons/hicolor/scalable/apps/darktable-1.svg share/icons/hicolor/scalable/apps/darktable-2.svg share/icons/hicolor/scalable/apps/darktable-3.svg share/icons/hicolor/scalable/apps/darktable.svg -%%NLS%%share/locale/cs/LC_MESSAGES/darktable.mo %%NLS%%share/locale/de/LC_MESSAGES/darktable.mo +%%NLS%%share/locale/en@truecase/LC_MESSAGES/darktable.mo %%NLS%%share/locale/es/LC_MESSAGES/darktable.mo %%NLS%%share/locale/fi/LC_MESSAGES/darktable.mo %%NLS%%share/locale/fr/LC_MESSAGES/darktable.mo %%NLS%%share/locale/he/LC_MESSAGES/darktable.mo %%NLS%%share/locale/hu/LC_MESSAGES/darktable.mo -%%NLS%%share/locale/it/LC_MESSAGES/darktable.mo %%NLS%%share/locale/ja/LC_MESSAGES/darktable.mo -%%NLS%%share/locale/nl/LC_MESSAGES/darktable.mo %%NLS%%share/locale/pl/LC_MESSAGES/darktable.mo %%NLS%%share/locale/pt_BR/LC_MESSAGES/darktable.mo %%NLS%%share/locale/ru/LC_MESSAGES/darktable.mo %%NLS%%share/locale/sl/LC_MESSAGES/darktable.mo %%NLS%%share/locale/sq/LC_MESSAGES/darktable.mo -%%NLS%%share/locale/tr/LC_MESSAGES/darktable.mo %%NLS%%share/locale/uk/LC_MESSAGES/darktable.mo %%NLS%%share/locale/zh_CN/LC_MESSAGES/darktable.mo %%NLS%%share/locale/zh_TW/LC_MESSAGES/darktable.mo