From f3e4aa1a18933dbafa1c09e8cfa022df6090873e Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Sun, 1 Dec 2019 17:04:05 +0530 Subject: [PATCH] openexr: Fix check for when to pass -std=c++98 commit 6adfb120ab0e1bb0b3439ad725a362cfe4fbe733 added this flag to fix builds with `-Werror`, and afterwards it was changed to use a version check when newer versions of openexr moved over to C++11. However, some distros have backported patches to older openexr versions which make it require C++11, which makes the version check incorrect and causes an error because we passed `-Werror -std=c++98`. Instead, directly check when usage of the header requires `-std=c++98` with `-Werror` and override the `cpp_std` setting on the target. Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1117 --- ext/openexr/meson.build | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ext/openexr/meson.build b/ext/openexr/meson.build index 0336fb886f..bddac7509a 100644 --- a/ext/openexr/meson.build +++ b/ext/openexr/meson.build @@ -1,19 +1,34 @@ openexr_dep = dependency('OpenEXR', required: get_option('openexr')) if openexr_dep.found() - openexr_cppargs = [] - + openexr_override_options = [] + # Older versions of openexr fail to build with -Werror when using GCC >= 9.2 + # and Clang >= 6 because it uses deprecated C++98 syntax. Explicitly pass + # -std=c++98 in those cases. Just checking the openexr version is not enough + # because distros (such as Ubuntu 18.04) have backported patches due to which + # older openexr versions now require C++11. if openexr_dep.version().version_compare('< 2.4.0') - openexr_cppargs += cxx.get_supported_arguments(['-std=c++98']) + # Check whether using the openexr headers with -Werror causes an error + if cxx.has_argument('-Werror') and cxx.check_header('ImfRgbaFile.h', dependencies: openexr_dep) + if not cxx.check_header('ImfRgbaFile.h', dependencies: openexr_dep, args: '-Werror') + # If setting -std to c++98 fixes it, use that! Else, warn. + if cxx.check_header('ImfRgbaFile.h', dependencies: openexr_dep, args: ['-Werror', '-std=c++98']) + openexr_override_options = ['cpp_std=c++98'] + else + warning('openexr headers can\'t be included with \'-Werror\', and no workaround found') + endif + endif + endif endif gstopenexr = library('gstopenexr', 'gstopenexr.c', 'gstopenexrdec.cpp', c_args: gst_plugins_bad_args, - cpp_args: gst_plugins_bad_args + openexr_cppargs, + cpp_args: gst_plugins_bad_args, link_args: noseh_link_args, include_directories: [configinc, libsinc], dependencies: [gstvideo_dep, openexr_dep], + override_options: openexr_override_options, install: true, install_dir: plugins_install_dir, )