From 3dc8f63baabb9af519b125537808b8b27d82ab47 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 11 Dec 2014 23:23:50 +0100 Subject: options: make --no-... options work for OPT_REPLACED too Do this by automatically adding the option, if the aliased option name also has a "no-..." variant. Could be easier by manually adding "no-..." variants to the option list, but this seems better because you can't just forget it. --- options/m_config.c | 28 +++++++++++++++++++++------- options/options.c | 5 +++-- 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'options') diff --git a/options/m_config.c b/options/m_config.c index 370fe09f32..e57b8ccd17 100644 --- a/options/m_config.c +++ b/options/m_config.c @@ -372,10 +372,6 @@ static void m_config_add_option(struct m_config *config, .name = arg->name, }; - if (co.opt->type == &m_option_type_alias || - co.opt->type == &m_option_type_removed) - co.is_generated = true; - if (arg->offset >= 0) { if (optstruct) co.data = (char *)optstruct + arg->offset; @@ -434,6 +430,24 @@ static void m_config_add_option(struct m_config *config, MP_TARRAY_APPEND(config, config->opts, config->num_opts, co); add_negation_option(config, &co, parent_name); + + if (co.opt->type == &m_option_type_alias) { + co.is_generated = true; // hide it + const char *alias = (const char *)co.opt->priv; + char no_alias[40]; + snprintf(no_alias, sizeof(no_alias), "no-%s", alias); + if (m_config_get_co(config, bstr0(no_alias))) { + struct m_option *new = talloc_zero(config, struct m_option); + new->name = talloc_asprintf(config, "no-%s", co.name); + new->priv = talloc_strdup(config, no_alias); + new->type = &m_option_type_alias; + new->offset = -1; + m_config_add_option(config, "", NULL, NULL, new); + } + } + + if (co.opt->type == &m_option_type_removed) + co.is_generated = true; // hide it } struct m_config_option *m_config_get_co(const struct m_config *config, @@ -453,14 +467,14 @@ struct m_config_option *m_config_get_co(const struct m_config *config, matches = true; if (matches) { if (co->opt->type == &m_option_type_alias) { - const char *new = (const char *)co->opt->priv; + const char *alias = (const char *)co->opt->priv; if (!co->warning_was_printed) { MP_WARN(config, "Warning: option %s%s was replaced with " "%s%s and might be removed in the future.\n", - prefix, co->name, prefix, new); + prefix, co->name, prefix, alias); co->warning_was_printed = true; } - return m_config_get_co(config, bstr0(new)); + return m_config_get_co(config, bstr0(alias)); } else if (co->opt->type == &m_option_type_removed) { if (!co->warning_was_printed) { char *msg = co->opt->priv; diff --git a/options/options.c b/options/options.c index 375414b2ff..7c52a60a2a 100644 --- a/options/options.c +++ b/options/options.c @@ -275,7 +275,6 @@ const m_option_t mp_opts[] = { OPT_STRING("vd", video_decoders, 0), OPT_FLAG("ad-spdif-dtshd", dtshd, 0), - OPT_FLAG("dtshd", dtshd, 0), // old alias OPT_CHOICE("hwdec", hwdec_api, 0, ({"no", 0}, @@ -305,7 +304,6 @@ const m_option_t mp_opts[] = { OPT_SUBSTRUCT("demuxer-rawvideo", demux_rawvideo, demux_rawvideo_conf, 0), OPT_FLAG("demuxer-mkv-subtitle-preroll", mkv_subtitle_preroll, 0), - OPT_FLAG("mkv-subtitle-preroll", mkv_subtitle_preroll, 0), // old alias OPT_DOUBLE("demuxer-mkv-subtitle-preroll-secs", mkv_subtitle_preroll_secs, M_OPT_MIN, .min = 0), OPT_FLAG("demuxer-mkv-probe-video-duration", mkv_probe_duration, 0), @@ -643,6 +641,9 @@ const m_option_t mp_opts[] = { OPT_REMOVED("no-cache-pause-below", "use --no-cache-pause"), OPT_REMOVED("volstep", "edit input.conf directly instead"), + OPT_REPLACED("mkv-subtitle-preroll", "demuxer-mkv-subtitle-preroll"), + OPT_REPLACED("dtshd", "ad-spdif-dtshd"), + {0} }; -- cgit v1.2.3