diff --git a/.github/workflows/on_PR_meson.yaml b/.github/workflows/on_PR_meson.yaml new file mode 100644 index 00000000..15d9f2a4 --- /dev/null +++ b/.github/workflows/on_PR_meson.yaml @@ -0,0 +1,68 @@ +name: On PRs - meson + +on: pull_request + +concurrency: + group: ${{github.workflow}}-${{github.head_ref}} + cancel-in-progress: true + +jobs: + Ubuntu: + runs-on: ubuntu-20.04 + name: Linux-GCC${{matrix.cxx}}-${{matrix.deps}} + strategy: + matrix: + cxx: ['7', '8', '9'] + deps: ['forcefallback', 'default'] + type: ['shared', 'static'] + steps: + - uses: actions/checkout@v3 + + - name: Install packages + run: | + sudo apt install -y g++-${{matrix.cxx}} + python3 -m pip install meson ninja + + - name: Sanity Checks + run: | + env CXX=g++-${{matrix.cxx}} meson setup "${{github.workspace}}/build" --wrap-mode=${{matrix.deps}} -Ddefault_library=${{matrix.type}} + meson compile -C "${{github.workspace}}/build" + + VisualStudio: + runs-on: windows-latest + name: MSVC-${{matrix.deps}} + strategy: + matrix: + deps: ['forcefallback', 'default'] + type: ['shared', 'static'] + steps: + - uses: actions/checkout@v3 + + - name: Install packages + run: | + python -m pip install meson ninja + + - uses: ilammy/msvc-dev-cmd@v1 + - name: Sanity Checks + run: | + meson setup "${{github.workspace}}/build" --wrap-mode=${{matrix.deps}} -Ddefault_library=${{matrix.type}} + meson compile -C "${{github.workspace}}/build" + + MacOS: + runs-on: macos-latest + name: macOS-${{matrix.deps}} + strategy: + matrix: + deps: ['forcefallback', 'default'] + type: ['shared', 'static'] + steps: + - uses: actions/checkout@v3 + + - name: Install packages + run: | + python3 -m pip install meson ninja + + - name: Compile + run: | + meson setup "${{github.workspace}}/build" --wrap-mode=${{matrix.deps}} -Ddefault_library=${{matrix.type}} + meson compile -C "${{github.workspace}}/build" diff --git a/.gitignore b/.gitignore index 02b6d1ad..dd45d686 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ contrib/vms/.vagrant CMakeUserPresets.json *cppcheck* +subprojects/packagecache diff --git a/README-meson b/README-meson new file mode 100644 index 00000000..54089b12 --- /dev/null +++ b/README-meson @@ -0,0 +1,10 @@ +meson build system + +This is a basic meson.build file intended to be used by meson projects that use +WrapDB: https://github.com/mesonbuild/wrapdb + +This can also be used as a test playground to test various options not exposed +by the CMake build, eg: iconv and intl on Windows. + +It is currently incomplete. Tests are not implemented yet. The library and +executable are. diff --git a/cmake/config.h.cmake b/cmake/config.h.cmake index 7c6a2258..8fe2c91f 100644 --- a/cmake/config.h.cmake +++ b/cmake/config.h.cmake @@ -35,12 +35,6 @@ #define EXV_ICONV_CONST #endif -// Define if you have the mmap function. -#cmakedefine EXV_HAVE_MMAP - -// Define if you have the munmap function. -#cmakedefine EXV_HAVE_MUNMAP - // Define if you have the zlib library. #cmakedefine EXV_HAVE_LIBZ diff --git a/cmake/generateConfigFile.cmake b/cmake/generateConfigFile.cmake index a89fff60..49c9a10f 100644 --- a/cmake/generateConfigFile.cmake +++ b/cmake/generateConfigFile.cmake @@ -23,8 +23,6 @@ set(EXV_HAVE_ICONV ${ICONV_FOUND}) set(EXV_HAVE_LIBZ ${ZLIB_FOUND}) set(EXV_HAVE_BROTLI ${BROTLI_FOUND}) -check_cxx_symbol_exists(mmap sys/mman.h EXV_HAVE_MMAP ) -check_cxx_symbol_exists(munmap sys/mman.h EXV_HAVE_MUNMAP ) check_cxx_symbol_exists(strerror_r string.h EXV_HAVE_STRERROR_R ) check_cxx_source_compiles( " @@ -36,10 +34,6 @@ int main() { return 0; }" EXV_STRERROR_R_CHAR_P ) -check_include_file_cxx( "libproc.h" EXV_HAVE_LIBPROC_H ) -check_include_file_cxx( "unistd.h" EXV_HAVE_UNISTD_H ) -check_include_file_cxx( "sys/mman.h" EXV_HAVE_SYS_MMAN_H ) - set(EXV_ENABLE_NLS ${EXIV2_ENABLE_NLS}) set(EXV_ENABLE_VIDEO ${EXIV2_ENABLE_VIDEO}) diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..dbae676b --- /dev/null +++ b/meson.build @@ -0,0 +1,330 @@ +project( + 'exiv2', + 'cpp', + version: '1.0.0', + meson_version: '>=0.49.0', + default_options: ['warning_level=1', 'cpp_std=c++17'], +) + +cargs = [] +cpp = meson.get_compiler('cpp') +if host_machine.system() == 'windows' and get_option('default_library') != 'static' + cargs += '-DEXIV2API=__declspec(dllexport)' +elif cpp.has_function_attribute('visibility') + cargs += '-DEXIV2API=__attribute__((visibility("default")))' +else + cargs += '-DEXIV2API=' +endif + +if host_machine.system() == 'windows' + if cpp.get_argument_syntax() == 'gcc' + add_project_arguments('-D__USE_MINGW_ANSI_STDIO', '-D__MINGW_USE_VC2005_COMPAT', language: 'cpp') + else + add_project_arguments('-DNOMINMAX', language: 'cpp') + endif +endif + +exiv_api = configuration_data() +exiv_conf = configure_file(output: 'exiv2lib_export.h', configuration: exiv_api) + +cdata = configuration_data() +cdata.set('EXV_PACKAGE_NAME', meson.project_name()) +ver = meson.project_version().split('.') +cdata.set('PROJECT_VERSION_MAJOR', ver[0]) +cdata.set('PROJECT_VERSION_MINOR', ver[1]) +cdata.set('PROJECT_VERSION_PATCH', ver[2]) +cdata.set('PROJECT_VERSION_TWEAK', 9) +cdata.set('PROJECT_VERSION', '@0@.@1@'.format(meson.project_version(), cdata.get('PROJECT_VERSION_TWEAK'))) +cdata.set('EXV_PACKAGE_VERSION', '@0@.@1@'.format(meson.project_version(), cdata.get('PROJECT_VERSION_TWEAK'))) +cdata.set('EXV_PACKAGE_STRING', '@0@ @1@'.format(meson.project_name(), cdata.get('PROJECT_VERSION'))) + +cdata.set('EXV_HAVE_MMAP', cpp.has_function('mmap')) +cdata.set('EXV_HAVE_MUNMAP', cpp.has_function('munmap')) +cdata.set('EXV_HAVE_STRERROR_R', cpp.has_function('strerror_r')) +cdata.set('EXV_STRERROR_R_CHAR_P', not cpp.compiles('#include \nint strerror_r(int,char*,size_t);int main(){}')) + +cdata.set('EXV_ENABLE_BMFF', get_option('bmff')) +cdata.set('EXV_HAVE_LENSDATA', get_option('lensdata')) +cdata.set('EXV_ENABLE_VIDEO', get_option('video')) + +deps = [] +deps += cpp.find_library('ws2_32', required: host_machine.system() == 'windows') + +# This makes assumptions that the libcpp is the GNU one on Linux systems +if cpp.get_argument_syntax() == 'gcc' and cpp.version().version_compare('<9') + if host_machine.system() == 'linux' + deps += cpp.find_library('stdc++fs') + elif cpp.get_id() == 'clang' + deps += cpp.find_library('c++fs') + endif +endif + +brotli_dep = dependency('libbrotlidec', disabler: true, required: false) +if brotli_dep.found() + deps += brotli_dep +endif + +curl_dep = dependency('libcurl', disabler: true, required: get_option('curl')) +if curl_dep.found() + deps += curl_dep +endif + +expat_dep = dependency('expat', disabler: true, required: get_option('xmp')) +if expat_dep.found() + deps += expat_dep +endif + +inih_dep = dependency('INIReader', disabler: true, required: get_option('inih')) +if inih_dep.found() + deps += inih_dep +endif + +zlib_dep = dependency('zlib', disabler: true, required: get_option('png')) +if zlib_dep.found() + deps += zlib_dep +endif + +if meson.version().version_compare('>= 0.60') + iconv_dep = dependency('iconv', disabler: true, required: get_option('iconv')) +else + iconv_dep = dependency('', disabler: true, required: false) +endif +if iconv_dep.found() + deps += iconv_dep +endif + +if meson.version().version_compare('>= 0.60') + intl_dep = dependency('intl', required: get_option('nls')) +else + intl_dep = dependency('', required: false) +endif +if intl_dep.found() + add_project_arguments('-DEXV_LOCALEDIR="@0@"'.format(get_option('prefix') / get_option('localedir')), language: 'cpp') + deps += intl_dep +endif + +cdata.set('EXV_ENABLE_INIH', inih_dep.found()) +cdata.set('EXV_HAVE_XMP_TOOLKIT', expat_dep.found()) +cdata.set('EXV_HAVE_BROTLI', brotli_dep.found()) +cdata.set('EXV_HAVE_ICONV', iconv_dep.found()) +cdata.set('EXV_HAVE_LIBZ', zlib_dep.found()) +cdata.set('EXV_USE_CURL', curl_dep.found()) +cdata.set('EXV_ENABLE_NLS', intl_dep.found()) +cdata.set('EXV_ENABLE_WEBREADY', curl_dep.found()) + +cfile = configure_file( + input: 'cmake/config.h.cmake', + output: 'exv_conf.h', + format: 'cmake@', + configuration: cdata, +) + +base_lib = files( + 'src/asfvideo.cpp', + 'src/basicio.cpp', + 'src/bmffimage.cpp', + 'src/bmpimage.cpp', + 'src/convert.cpp', + 'src/cr2image.cpp', + 'src/crwimage.cpp', + 'src/datasets.cpp', + 'src/easyaccess.cpp', + 'src/epsimage.cpp', + 'src/error.cpp', + 'src/exif.cpp', + 'src/futils.cpp', + 'src/gifimage.cpp', + 'src/http.cpp', + 'src/image.cpp', + 'src/iptc.cpp', + 'src/jp2image.cpp', + 'src/jpgimage.cpp', + 'src/matroskavideo.cpp', + 'src/metadatum.cpp', + 'src/mrwimage.cpp', + 'src/orfimage.cpp', + 'src/pgfimage.cpp', + 'src/photoshop.cpp', + 'src/preview.cpp', + 'src/properties.cpp', + 'src/psdimage.cpp', + 'src/quicktimevideo.cpp', + 'src/rafimage.cpp', + 'src/riffvideo.cpp', + 'src/rw2image.cpp', + 'src/tags.cpp', + 'src/tgaimage.cpp', + 'src/tiffimage.cpp', + 'src/types.cpp', + 'src/value.cpp', + 'src/version.cpp', + 'src/webpimage.cpp', + 'src/xmp.cpp', + 'src/xmpsidecar.cpp', +) + +int_lib = files( + 'src/canonmn_int.cpp', + 'src/casiomn_int.cpp', + 'src/cr2header_int.cpp', + 'src/crwimage_int.cpp', + 'src/fujimn_int.cpp', + 'src/helper_functions.cpp', + 'src/image_int.cpp', + 'src/jp2image_int.cpp', + 'src/makernote_int.cpp', + 'src/minoltamn_int.cpp', + 'src/nikonmn_int.cpp', + 'src/olympusmn_int.cpp', + 'src/orfimage_int.cpp', + 'src/panasonicmn_int.cpp', + 'src/pentaxmn_int.cpp', + 'src/rw2image_int.cpp', + 'src/samsungmn_int.cpp', + 'src/sigmamn_int.cpp', + 'src/sonymn_int.cpp', + 'src/tags_int.cpp', + 'src/tiffcomposite_int.cpp', + 'src/tiffimage_int.cpp', + 'src/tiffvisitor_int.cpp', + 'src/utils.cpp', +) + +headers = files( + 'include/exiv2/basicio.hpp', + 'include/exiv2/bmffimage.hpp', + 'include/exiv2/bmpimage.hpp', + 'include/exiv2/config.h', + 'include/exiv2/convert.hpp', + 'include/exiv2/cr2image.hpp', + 'include/exiv2/crwimage.hpp', + 'include/exiv2/datasets.hpp', + 'include/exiv2/easyaccess.hpp', + 'include/exiv2/epsimage.hpp', + 'include/exiv2/error.hpp', + 'include/exiv2/exif.hpp', + 'include/exiv2/exiv2.hpp', + 'include/exiv2/futils.hpp', + 'include/exiv2/gifimage.hpp', + 'include/exiv2/http.hpp', + 'include/exiv2/image.hpp', + 'include/exiv2/image_types.hpp', + 'include/exiv2/iptc.hpp', + 'include/exiv2/jp2image.hpp', + 'include/exiv2/jpgimage.hpp', + 'include/exiv2/metadatum.hpp', + 'include/exiv2/mrwimage.hpp', + 'include/exiv2/orfimage.hpp', + 'include/exiv2/pgfimage.hpp', + 'include/exiv2/photoshop.hpp', + 'include/exiv2/pngimage.hpp', + 'include/exiv2/preview.hpp', + 'include/exiv2/properties.hpp', + 'include/exiv2/psdimage.hpp', + 'include/exiv2/rafimage.hpp', + 'include/exiv2/rw2image.hpp', + 'include/exiv2/slice.hpp', + 'include/exiv2/tags.hpp', + 'include/exiv2/tgaimage.hpp', + 'include/exiv2/tiffimage.hpp', + 'include/exiv2/types.hpp', + 'include/exiv2/value.hpp', + 'include/exiv2/version.hpp', + 'include/exiv2/webpimage.hpp', + 'include/exiv2/xmp_exiv2.hpp', + 'include/exiv2/xmpsidecar.hpp', +) + +headers += exiv_conf +headers += cfile + +libinc = include_directories('include/exiv2') +xmp_lib = files() +if expat_dep.found() + libinc = include_directories('include/exiv2', 'xmpsdk/include') + xmp_lib = files( + 'xmpsdk/src/ExpatAdapter.cpp', + 'xmpsdk/src/MD5.cpp', + 'xmpsdk/src/ParseRDF.cpp', + 'xmpsdk/src/UnicodeConversions.cpp', + 'xmpsdk/src/WXMPIterator.cpp', + 'xmpsdk/src/WXMPMeta.cpp', + 'xmpsdk/src/WXMPUtils.cpp', + 'xmpsdk/src/XML_Node.cpp', + 'xmpsdk/src/XMPCore_Impl.cpp', + 'xmpsdk/src/XMPIterator.cpp', + 'xmpsdk/src/XMPMeta-GetSet.cpp', + 'xmpsdk/src/XMPMeta-Parse.cpp', + 'xmpsdk/src/XMPMeta-Serialize.cpp', + 'xmpsdk/src/XMPMeta.cpp', + 'xmpsdk/src/XMPUtils-FileInfo.cpp', + 'xmpsdk/src/XMPUtils.cpp', + ) +endif + +if zlib_dep.found() + base_lib += files('src/pngimage.cpp') + int_lib += files('src/pngchunk_int.cpp') + headers += files('include/exiv2/photoshop.hpp') +endif + +install_man('man/man1/exiv2.1') + +install_headers( + headers, + subdir: 'exiv2', +) + +exiv2 = library( + 'exiv2', + base_lib, + int_lib, + xmp_lib, + cpp_args: cargs, + version: meson.project_version(), + gnu_symbol_visibility: 'hidden', + dependencies: deps, + include_directories: libinc, + install: true, +) + +dllapi = '-DEXIV2API=' +if host_machine.system() == 'windows' and get_option('default_library') != 'static' + dllapi = '-DEXIV2API=__declspec(dllimport)' +endif + +depinc = include_directories('include') +exiv2_dep = declare_dependency( + compile_args: dllapi, + dependencies: intl_dep, + include_directories: depinc, + link_with: exiv2, +) + +pkg = import('pkgconfig') +pkg.generate( + exiv2, + description: 'Exif/IPTC/Xmp C++ metadata library and tools plus ICC Profiles, Previews and more.', + url: 'https://exiv2.org', +) + +exiv2inc = include_directories('include/exiv2', 'src') + +exiv2_sources = files( + 'app/actions.cpp', + 'app/app_utils.cpp', + 'app/exiv2.cpp', + 'app/getopt.cpp', +) + +if host_machine.system() == 'windows' + exiv2_sources += files('app/wmain.cpp') +endif + +executable( + 'exiv2', + exiv2_sources, + include_directories: exiv2inc, + dependencies: exiv2_dep, + install: true, +) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..cb372c70 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,43 @@ +option('curl', type : 'feature', + description : 'USE Libcurl for HttpIo (WEBREADY)', +) + +option('brotli', type : 'feature', + description : 'Build with brotli support (requires libbrotlidec)', +) + +option('nls', type : 'feature', + description : 'Build native language support (requires gettext)', +) + +option('png', type : 'feature', + description : 'Build with png support (requires libz)', +) + +option('iconv', type : 'feature', + description : 'Build with iconv support', +) + +option('inih', type : 'feature', + description : 'Build with INIReader support', +) + +option('bmff', type : 'boolean', + value: true, + description : 'Build with BMFF support', +) + +option('lensdata', type : 'boolean', + value: true, + description : 'Build including lens data', +) + +option('video', type : 'boolean', + value: true, + description : 'Build support for video formats', +) + +option('xmp', type : 'boolean', + value: true, + description : 'Build support for XMP', +) diff --git a/src/basicio.cpp b/src/basicio.cpp index a5420acf..ae3e35b3 100644 --- a/src/basicio.cpp +++ b/src/basicio.cpp @@ -197,7 +197,7 @@ FileIo::~FileIo() { int FileIo::munmap() { int rc = 0; if (p_->pMappedArea_) { -#if defined EXV_HAVE_MMAP && defined EXV_HAVE_MUNMAP +#if __has_include() if (::munmap(p_->pMappedArea_, p_->mappedLength_) != 0) { rc = 1; } @@ -238,7 +238,7 @@ byte* FileIo::mmap(bool isWriteable) { if (p_->isWriteable_ && p_->switchMode(Impl::opWrite) != 0) { throw Error(ErrorCode::kerFailedToMapFileForReadWrite, path(), strError()); } -#if defined EXV_HAVE_MMAP && defined EXV_HAVE_MUNMAP +#if __has_include() int prot = PROT_READ; if (p_->isWriteable_) { prot |= PROT_WRITE; diff --git a/src/canonmn_int.cpp b/src/canonmn_int.cpp index 3c4aa5ee..9da55f92 100644 --- a/src/canonmn_int.cpp +++ b/src/canonmn_int.cpp @@ -366,12 +366,12 @@ constexpr TagDetails canonModelId[] = {{0x00000412, "EOS M50 / Kiss M"}, {0x80000417, "EOS Rebel SL2 / 200D / Kiss X9"}, {0x80000421, "EOS R5"}, {0x80000422, "EOS Rebel T100 / 4000D / 3000D"}, - {0x80000424, "EOS R"}, + {0x80000424, "EOS R / Ra"}, {0x80000428, "EOS-1D X Mark III"}, {0x80000432, "EOS Rebel T7 / 2000D / 1500D / Kiss X90"}, {0x80000433, "EOS RP"}, {0x80000435, "EOS Rebel T8i / 850D / Kiss X10i"}, - {0x80000436, "EOS SL3 / 250D / Kiss X10"}, + {0x80000436, "EOS Rebel SL3 / 250D / 200D Mark II / Kiss X10"}, {0x80000437, "EOS 90D"}, {0x80000450, "EOS R3"}, {0x80000453, "EOS R6"}, @@ -379,8 +379,9 @@ constexpr TagDetails canonModelId[] = {{0x00000412, "EOS M50 / Kiss M"}, {0x80000465, "EOS R10"}, {0x80000467, "PowerShot ZOOM"}, {0x80000468, "EOS M50 Mark II / Kiss M2"}, + {0x80000480, "EOS R50"}, {0x80000481, "EOS R6 Mark II"}, - //{ (long int)tbd, "EOS Ra" }, + {0x80000487, "EOS R8"}, {0x80000520, "EOS D2000C"}, {0x80000560, "EOS D6000C"}}; @@ -1951,6 +1952,9 @@ constexpr TagDetails canonCsLensType[] = {{1, "Canon EF 50mm f/1.8"}, {61182, "Canon RF 1200mm F8L IS USM + RF1.4x"}, {61182, "Canon RF 1200mm F8L IS USM + RF2x"}, {61182, "Canon RF 15-30mm F4.5-6.3 IS STM"}, + {61182, "Canon RF 135mm F1.8 L IS USM"}, + {61182, "Canon RF 24-50mm F4.5-6.3 IS STM"}, + {61182, "Canon RF-S 55-210mm F5-7.1 IS STM"}, {65535, "n/a"}}; //! FlashActivity, tag 0x001c @@ -2363,7 +2367,10 @@ constexpr TagDetails canonRFLensType[] = {{0, N_("n/a")}, {298, "Canon RF 1200mm F8L IS USM"}, {299, "Canon RF 1200mm F8L IS USM + RF1.4x"}, {300, "Canon RF 1200mm F8L IS USM + RF2x"}, - {302, "Canon RF 15-30mm F4.5-6.3 IS STM"}}; + {302, "Canon RF 15-30mm F4.5-6.3 IS STM"}, + {303, "Canon RF 135mm F1.8 L IS USM"}, + {304, "Canon RF 24-50mm F4.5-6.3 IS STM"}, + {305, "Canon RF-S 55-210mm F5-7.1 IS STM"}}; // Canon File Info Tag constexpr TagInfo CanonMakerNote::tagInfoFi_[] = { diff --git a/src/convert.cpp b/src/convert.cpp index cd822a89..e92d652c 100644 --- a/src/convert.cpp +++ b/src/convert.cpp @@ -1586,7 +1586,7 @@ bool convertStringCharsetIconv(std::string& str, const char* from, const char* t #ifdef WINICONV_CONST auto inptr = (WINICONV_CONST char*)(str.c_str()); #else - auto inptr = const_cast(str.c_str()); + auto inptr = (EXV_ICONV_CONST char*)(str.c_str()); #endif size_t inbytesleft = str.length(); while (inbytesleft) { diff --git a/src/tags_int.hpp b/src/tags_int.hpp index 6dca64a3..05298e10 100644 --- a/src/tags_int.hpp +++ b/src/tags_int.hpp @@ -94,7 +94,7 @@ struct TagVocabulary { by looking up a reference table. */ template -std::ostream& printTagString(std::ostream& os, const std::string value, const ExifData*) { +std::ostream& printTagString(std::ostream& os, const std::string& value, const ExifData*) { auto td = Exiv2::find(array, value); if (td) { os << exvGettext(td->label_); diff --git a/src/version.cpp b/src/version.cpp index b9c8bcc2..919f7101 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -352,11 +352,11 @@ void Exiv2::dumpLibraryInfo(std::ostream& os, const std::vector& key have_strings = 1; #endif -#ifdef EXV_HAVE_MMAP +#if __has_include() have_mmap = 1; #endif -#ifdef EXV_HAVE_MUNMAP +#if __has_include() have_munmap = 1; #endif diff --git a/subprojects/.gitignore b/subprojects/.gitignore new file mode 100644 index 00000000..faa2502e --- /dev/null +++ b/subprojects/.gitignore @@ -0,0 +1,2 @@ +/*/ +!packagefiles/ diff --git a/subprojects/expat.wrap b/subprojects/expat.wrap new file mode 100644 index 00000000..60eedb33 --- /dev/null +++ b/subprojects/expat.wrap @@ -0,0 +1,12 @@ +[wrap-file] +directory = expat-2.5.0 +source_url = https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz +source_filename = expat-2.5.0.tar.bz2 +source_hash = ef2420f0232c087801abf705e89ae65f6257df6b7931d37846a193ef2e8cdcbe +patch_filename = expat_2.5.0-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.5.0-1/get_patch +patch_hash = 0d0d6e07ed21cf4892126a8270f5fd182012ab34b3ebe24932a2bef5ca608a61 +wrapdb_version = 2.5.0-1 + +[provide] +expat = expat_dep diff --git a/subprojects/google-brotli.wrap b/subprojects/google-brotli.wrap new file mode 100644 index 00000000..736be021 --- /dev/null +++ b/subprojects/google-brotli.wrap @@ -0,0 +1,14 @@ +[wrap-file] +directory = brotli-1.0.9 +source_url = https://github.com/google/brotli/archive/v1.0.9.tar.gz +source_filename = v1.0.9.tar.gz +source_hash = f9e8d81d0405ba66d181529af42a3354f838c939095ff99930da6aa9cdf6fe46 +patch_filename = google-brotli_1.0.9-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/google-brotli_1.0.9-1/get_patch +patch_hash = 11135edf60bdf155b075cb6cf80dcc743bdcbfc5b8c48c327e717b279db447a1 + +[provide] +libbrotlicommon = brotli_common_dep +libbrotlidec = brotli_decoder_dep +libbrotlienc = brotli_encoder_dep + diff --git a/subprojects/inih.wrap b/subprojects/inih.wrap new file mode 100644 index 00000000..b7836436 --- /dev/null +++ b/subprojects/inih.wrap @@ -0,0 +1,10 @@ +[wrap-file] +directory = inih-r56 +source_url = https://github.com/benhoyt/inih/archive/r56.tar.gz +source_filename = inih-r56.tar.gz +source_hash = 4f2ba6bd122d30281a8c7a4d5723b7af90b56aa828c0e88256d7fceda03a491a +wrapdb_version = r56-1 + +[provide] +inih = inih_dep +inireader = INIReader_dep diff --git a/subprojects/zlib.wrap b/subprojects/zlib.wrap new file mode 100644 index 00000000..23af071a --- /dev/null +++ b/subprojects/zlib.wrap @@ -0,0 +1,12 @@ +[wrap-file] +directory = zlib-1.2.13 +source_url = http://zlib.net/fossils/zlib-1.2.13.tar.gz +source_filename = zlib-1.2.13.tar.gz +source_hash = b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30 +patch_filename = zlib_1.2.13-2_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/zlib_1.2.13-2/get_patch +patch_hash = a7abea3ad65dc2c291ad5fbbf5355d0585a7f7b8c935d4a74335b8fe18684506 +wrapdb_version = 1.2.13-2 + +[provide] +zlib = zlib_dep diff --git a/test/data/test_reference_files/pr_2216.exv.out b/test/data/test_reference_files/pr_2216.exv.out index 9ed6008f..68296520 100644 --- a/test/data/test_reference_files/pr_2216.exv.out +++ b/test/data/test_reference_files/pr_2216.exv.out @@ -149,7 +149,7 @@ Exif.CanonCf.SetButtonFunction Short 1 1 1 Exif.CanonCf.SensorCleaning Short 1 0 0 Exif.CanonCf.SuperimposedDisplay Short 1 0 0 Exif.CanonCf.ShutterReleaseNoCFCard Short 1 0 0 -Exif.Canon.ModelID Long 1 2147484708 EOS R +Exif.Canon.ModelID Long 1 2147484708 EOS R / Ra Exif.Canon.ThumbnailImageValidArea Short 4 0 159 6 113 0 159 6 113 Exif.Canon.AFInfo Short 608 1216 13 143 1 6720 4480 6720 4480 468 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 441 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 1216 13 143 1 6720 4480 6720 4480 468 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 441 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 Exif.Canon.AFInfoSize SShort 1 1216 1216