topology: Add option to pass include path for conditional includes

The include path passed with -I option will override the relative
include path based on the source file.

Fixes: https://github.com/alsa-project/alsa-utils/pull/125
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Ranjani Sridharan 2021-12-07 21:06:29 -08:00 committed by Jaroslav Kysela
parent 7692cfa0c5
commit 79f8ae46b6

View file

@ -251,7 +251,7 @@ static char *get_inc_path(const char *filename)
/* Convert Topology2.0 conf to the existing conf syntax */ /* Convert Topology2.0 conf to the existing conf syntax */
static int pre_process_conf(const char *source_file, const char *output_file, static int pre_process_conf(const char *source_file, const char *output_file,
const char *pre_processor_defs) const char *pre_processor_defs, const char *include_path)
{ {
struct tplg_pre_processor *tplg_pp; struct tplg_pre_processor *tplg_pp;
size_t config_size; size_t config_size;
@ -271,7 +271,10 @@ static int pre_process_conf(const char *source_file, const char *output_file,
} }
/* pre-process conf file */ /* pre-process conf file */
inc_path = get_inc_path(source_file); if (!include_path)
inc_path = get_inc_path(source_file);
else
inc_path = strdup(include_path);
err = pre_process(tplg_pp, config, config_size, pre_processor_defs, inc_path); err = pre_process(tplg_pp, config, config_size, pre_processor_defs, inc_path);
free(inc_path); free(inc_path);
@ -282,7 +285,7 @@ static int pre_process_conf(const char *source_file, const char *output_file,
} }
static int compile(const char *source_file, const char *output_file, int cflags, static int compile(const char *source_file, const char *output_file, int cflags,
const char *pre_processor_defs) const char *pre_processor_defs, const char *include_path)
{ {
struct tplg_pre_processor *tplg_pp = NULL; struct tplg_pre_processor *tplg_pp = NULL;
snd_tplg_t *tplg; snd_tplg_t *tplg;
@ -304,7 +307,10 @@ static int compile(const char *source_file, const char *output_file, int cflags,
init_pre_processor(&tplg_pp, SND_OUTPUT_BUFFER, NULL); init_pre_processor(&tplg_pp, SND_OUTPUT_BUFFER, NULL);
/* pre-process conf file */ /* pre-process conf file */
inc_path = get_inc_path(source_file); if (!include_path)
inc_path = get_inc_path(source_file);
else
inc_path = strdup(include_path);
err = pre_process(tplg_pp, config, config_size, pre_processor_defs, inc_path); err = pre_process(tplg_pp, config, config_size, pre_processor_defs, inc_path);
free(inc_path); free(inc_path);
if (err) { if (err) {
@ -375,7 +381,7 @@ static int decode(const char *source_file, const char *output_file,
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
static const char short_options[] = "hc:d:n:u:v:o:pP:sgxzV" static const char short_options[] = "hc:d:n:u:v:o:pP:sgxzVI:"
#if SND_LIB_VER(1, 2, 5) < SND_LIB_VERSION #if SND_LIB_VER(1, 2, 5) < SND_LIB_VERSION
"D:" "D:"
#endif #endif
@ -401,6 +407,7 @@ int main(int argc, char *argv[])
}; };
char *source_file = NULL; char *source_file = NULL;
char *output_file = NULL; char *output_file = NULL;
const char *inc_path = NULL;
const char *pre_processor_defs = NULL; const char *pre_processor_defs = NULL;
int c, err, op = 'c', cflags = 0, dflags = 0, sflags = 0, option_index; int c, err, op = 'c', cflags = 0, dflags = 0, sflags = 0, option_index;
@ -444,6 +451,9 @@ int main(int argc, char *argv[])
op = 'P'; op = 'P';
source_file = optarg; source_file = optarg;
break; break;
case 'I':
inc_path = optarg;
break;
case 'p': case 'p':
pre_process_config = true; pre_process_config = true;
break; break;
@ -483,13 +493,13 @@ int main(int argc, char *argv[])
switch (op) { switch (op) {
case 'c': case 'c':
err = compile(source_file, output_file, cflags, pre_processor_defs); err = compile(source_file, output_file, cflags, pre_processor_defs, inc_path);
break; break;
case 'd': case 'd':
err = decode(source_file, output_file, cflags, dflags, sflags); err = decode(source_file, output_file, cflags, dflags, sflags);
break; break;
case 'P': case 'P':
err = pre_process_conf(source_file, output_file, pre_processor_defs); err = pre_process_conf(source_file, output_file, pre_processor_defs, inc_path);
break; break;
default: default:
err = dump(source_file, output_file, cflags, sflags); err = dump(source_file, output_file, cflags, sflags);