A challenge with QEMU is that internal APIs get obsoleted but chasing down use of old APIs is not as simple as it should be. Introduce a --enable-deprecations configure flag which expands the macro "QEMU_DEPRECATIONS" into "G_GNUC_DEPRECATED". This will trigger a compiler warning for any use of the deprecated APIs.
It would generally be a good idea to disable -Werror when turning on deprecations otherwise the build will quickly abort. XXX: possibly add -Wno-error=deprecated-declarations, so we have show deprecations by default despite -Werror being on by default. This would trigger very many warnings but might be worth it if we want to strongly nudge maintainers to convert existing code. Our historical approach of "hope" has never worked to eliminate old code patterns. Signed-off-by: Daniel P. Berrangé <[email protected]> --- include/qemu/osdep.h | 19 +++++++++++++++++++ meson.build | 1 + meson_options.txt | 2 ++ scripts/meson-buildoptions.sh | 3 +++ 4 files changed, 25 insertions(+) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 2f0e61ad6b..99b8f9cbb7 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -447,6 +447,25 @@ void QEMU_ERROR("code path is reachable") ((void)0)) #endif +/* + * Tag an internal APIs which should no longer be used + * to emit a warning during build if --enable-deprecations + * is used with configure. Use of -Werror will trigger + * immediate build failure if this is used. + */ +#ifdef CONFIG_DEPRECATIONS +# define QEMU_DEPRECATED G_GNUC_DEPRECATED +# define QEMU_DEPRECATIONS_OFF \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +# define QEMU_DEPRECATIONS_ON \ + _Pragma("GCC diagnostic pop") +#else +# define QEMU_DEPRECATED +# define QEMU_DEPRECATIONS_OFF +# define QEMU_DEPRECATIONS_ON +#endif + /* * Minimum function that returns zero only if both values are zero. * Intended for use with unsigned values only. diff --git a/meson.build b/meson.build index 19e123423b..9e863aa897 100644 --- a/meson.build +++ b/meson.build @@ -2567,6 +2567,7 @@ config_host_data.set('CONFIG_DEBUG_STACK_USAGE', get_option('debug_stack_usage') config_host_data.set('CONFIG_DEBUG_TCG', get_option('debug_tcg')) config_host_data.set('CONFIG_DEBUG_REMAP', get_option('debug_remap')) config_host_data.set('CONFIG_QOM_CAST_DEBUG', get_option('qom_cast_debug')) +config_host_data.set('CONFIG_DEPRECATIONS', get_option('deprecations')) config_host_data.set('CONFIG_REPLICATION', get_option('replication').allowed()) config_host_data.set('CONFIG_FSFREEZE', qga_fsfreeze) config_host_data.set('CONFIG_FSTRIM', qga_fstrim) diff --git a/meson_options.txt b/meson_options.txt index a07cb47d35..8f5924422d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -367,6 +367,8 @@ option('qom_cast_debug', type: 'boolean', value: true, description: 'cast debugging support') option('slirp_smbd', type : 'feature', value : 'auto', description: 'use smbd (at path --smbd=*) in slirp networking') +option('deprecations', type: 'boolean', value: true, + description: 'enable internal API deprecation warnings') option('qemu_ga_manufacturer', type: 'string', value: 'QEMU', description: '"manufacturer" name for qemu-ga registry entries') diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh index c003985047..fb57f0610d 100644 --- a/scripts/meson-buildoptions.sh +++ b/scripts/meson-buildoptions.sh @@ -13,6 +13,7 @@ meson_options_help() { printf "%s\n" ' --datadir=VALUE Data file directory [share]' printf "%s\n" ' --disable-coroutine-pool coroutine freelist (better performance)' printf "%s\n" ' --disable-debug-info Enable debug symbols and other information' + printf "%s\n" ' --disable-deprecations enable internal API deprecation warnings' printf "%s\n" ' --disable-hexagon-idef-parser' printf "%s\n" ' use idef-parser to automatically generate TCG' printf "%s\n" ' code for the Hexagon frontend' @@ -306,6 +307,8 @@ _meson_option_parse() { --disable-debug-stack-usage) printf "%s" -Ddebug_stack_usage=false ;; --enable-debug-tcg) printf "%s" -Ddebug_tcg=true ;; --disable-debug-tcg) printf "%s" -Ddebug_tcg=false ;; + --enable-deprecations) printf "%s" -Ddeprecations=true ;; + --disable-deprecations) printf "%s" -Ddeprecations=false ;; --enable-dmg) printf "%s" -Ddmg=enabled ;; --disable-dmg) printf "%s" -Ddmg=disabled ;; --docdir=*) quote_sh "-Ddocdir=$2" ;; -- 2.54.0
