From 3a62bf63343c6c316612377142a0745ade0c0116dafc2a7baef6a17c99613cfa Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Mon, 17 Feb 2020 11:44:32 +0000 Subject: [PATCH] Accepting request 774839 from home:tiwai:branches:multimedia:libs - Backport upstream fixes: alsatplg fixes, misc cleanups: 0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch 0028-alsatplg-add-V-version-option.patch 0029-alsatplg-add-decode-command.patch 0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch 0031-configure-fix-new-libatopology-check.patch 0032-Use-__func__-instead-of-__FUNCTION__.patch 0033-Avoid-pointer-arithmetic-on-void.patch 0034-Use-lli-for-long-long-in-printf.patch 0035-Avoid-empty-initializer-list.patch - Fix build on SLE12-* target OBS-URL: https://build.opensuse.org/request/show/774839 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa-utils?expand=0&rev=167 --- ...-to-use-the-new-libatopology-functio.patch | 452 ++++++++++++++++++ 0028-alsatplg-add-V-version-option.patch | 93 ++++ 0029-alsatplg-add-decode-command.patch | 237 +++++++++ ...dd-documentation-for-z-dapm-nosort-h.patch | 25 + ...configure-fix-new-libatopology-check.patch | 36 ++ ...Use-__func__-instead-of-__FUNCTION__.patch | 67 +++ 0033-Avoid-pointer-arithmetic-on-void.patch | 103 ++++ 0034-Use-lli-for-long-long-in-printf.patch | 59 +++ 0035-Avoid-empty-initializer-list.patch | 86 ++++ alsa-utils.changes | 16 + alsa-utils.spec | 22 + 11 files changed, 1196 insertions(+) create mode 100644 0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch create mode 100644 0028-alsatplg-add-V-version-option.patch create mode 100644 0029-alsatplg-add-decode-command.patch create mode 100644 0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch create mode 100644 0031-configure-fix-new-libatopology-check.patch create mode 100644 0032-Use-__func__-instead-of-__FUNCTION__.patch create mode 100644 0033-Avoid-pointer-arithmetic-on-void.patch create mode 100644 0034-Use-lli-for-long-long-in-printf.patch create mode 100644 0035-Avoid-empty-initializer-list.patch diff --git a/0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch b/0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch new file mode 100644 index 0000000..15f5e79 --- /dev/null +++ b/0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch @@ -0,0 +1,452 @@ +From cbabe7a3f0cc84ecd352d4cbf85148946fa6c0d5 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Thu, 19 Dec 2019 15:36:05 +0100 +Subject: [PATCH 27/35] alsatplg: rewrite to use the new libatopology functions + +Add '-u,--dump' operation. +Add '-g,--group' and '-x,--nocheck' modifiers. +Add '-z,--dapm-nosort' modifier. +Allow to operate with stdin/stdout for the file input/output. + +Signed-off-by: Jaroslav Kysela +--- + topology/alsatplg.rst | 17 ++- + topology/topology.c | 304 ++++++++++++++++++++++++++++++-------------------- + 2 files changed, 199 insertions(+), 122 deletions(-) + +diff --git a/topology/alsatplg.rst b/topology/alsatplg.rst +index 855edff67ecf..e09c865cc9b2 100644 +--- a/topology/alsatplg.rst ++++ b/topology/alsatplg.rst +@@ -50,12 +50,27 @@ Available options: + **-c**, **--compile** `FILE` + source configuration file for the compilation + ++ **-n**, **--normalize** `FILE` ++ parse and save the configuration file in the normalized format ++ ++ **-u**, **--dump** `FILE` ++ parse and save the configuration file in the specified format ++ + **-o**, **--output** `FILE` +- output binary file ++ output file + + **-v**, **--verbose** `LEVEL` + set verbose level + ++ **-s**, **--sort** ++ sort the configuration identifiers (set for normalization) ++ ++ **-x**, **--nocheck** ++ save the configuration without additional integrity check ++ ++ **-z**, **--dapm-nosort** ++ do not sort DAPM graph items (like in version 1.2.1-) ++ + + FILES + ===== +diff --git a/topology/topology.c b/topology/topology.c +index bc5797c5f14f..a94941ae762e 100644 +--- a/topology/topology.c ++++ b/topology/topology.c +@@ -1,4 +1,5 @@ + /* ++ Copyright(c) 2019 Red Hat Inc. + Copyright(c) 2014-2015 Intel Corporation + Copyright(c) 2010-2011 Texas Instruments Incorporated, + All rights reserved. +@@ -44,165 +45,205 @@ _("Usage: %s [OPTIONS]...\n" + "-h, --help help\n" + "-c, --compile=FILE compile file\n" + "-n, --normalize=FILE normalize file\n" ++"-u, --dump=FILE dump (reparse) file\n" + "-v, --verbose=LEVEL set verbosity level (0...1)\n" + "-o, --output=FILE set output file\n" + "-s, --sort sort the identifiers in the normalized output\n" ++"-g, --group save configuration by group indexes\n" ++"-x, --nocheck save configuration without additional integrity checks\n" + ), name); + } + +-static int _compar(const void *a, const void *b) ++static int load(snd_tplg_t **tplg, const char *source_file, int cflags) + { +- const snd_config_t *c1 = *(snd_config_t **)a; +- const snd_config_t *c2 = *(snd_config_t **)b; +- const char *id1, *id2; +- if (snd_config_get_id(c1, &id1)) return 0; +- if (snd_config_get_id(c2, &id2)) return 0; +- return strcmp(id1, id2); +-} ++ int fd, err; ++ char *buf, *buf2; ++ size_t size, pos; ++ ssize_t r; + +-static snd_config_t *normalize_config(const char *id, snd_config_t *src, int sort) +-{ +- snd_config_t *dst, **a; +- snd_config_iterator_t i, next; +- int index, count; +- +- if (snd_config_get_type(src) != SND_CONFIG_TYPE_COMPOUND) { +- if (snd_config_copy(&dst, src) >= 0) +- return dst; +- return NULL; +- } +- count = 0; +- snd_config_for_each(i, next, src) +- count++; +- a = malloc(sizeof(dst) * count); +- if (a == NULL) +- return NULL; +- index = 0; +- snd_config_for_each(i, next, src) { +- snd_config_t *s = snd_config_iterator_entry(i); +- a[index++] = s; +- } +- if (sort) +- qsort(a, count, sizeof(a[0]), _compar); +- if (snd_config_make_compound(&dst, id, count == 1)) { +- free(a); +- return NULL; +- } +- for (index = 0; index < count; index++) { +- snd_config_t *s = a[index]; +- const char *id2; +- if (snd_config_get_id(s, &id2)) { +- snd_config_delete(dst); +- free(a); +- return NULL; +- } +- s = normalize_config(id2, s, sort); +- if (s == NULL || snd_config_add(dst, s)) { +- if (s) +- snd_config_delete(s); +- snd_config_delete(dst); +- free(a); +- return NULL; ++ if (strcmp(source_file, "-") == 0) { ++ fd = fileno(stdin); ++ } else { ++ fd = open(source_file, O_RDONLY); ++ if (fd < 0) { ++ fprintf(stderr, _("Unable to open input file '%s': %s\n"), ++ source_file, strerror(-errno)); ++ return 1; + } + } +- free(a); +- return dst; +-} + +-static int compile(const char *source_file, const char *output_file, int verbose) +-{ +- snd_tplg_t *snd_tplg; +- int err; ++ size = 16*1024; ++ pos = 0; ++ buf = malloc(size); ++ if (buf == NULL) ++ goto _nomem; ++ while (1) { ++ r = read(fd, buf + pos, size - pos); ++ if (r < 0 && (errno == EAGAIN || errno == EINTR)) ++ continue; ++ if (r <= 0) ++ break; ++ pos += r; ++ size += 8*1024; ++ buf2 = realloc(buf, size); ++ if (buf2 == NULL) { ++ free(buf); ++ goto _nomem; ++ } ++ buf = buf2; ++ } ++ if (fd != fileno(stdin)) ++ close(fd); ++ if (r < 0) { ++ fprintf(stderr, _("Read error: %s\n"), strerror(-errno)); ++ free(buf); ++ goto _err; ++ } + +- snd_tplg = snd_tplg_new(); +- if (snd_tplg == NULL) { ++ *tplg = snd_tplg_create(cflags); ++ if (*tplg == NULL) { + fprintf(stderr, _("failed to create new topology context\n")); ++ free(buf); + return 1; + } + +- snd_tplg_verbose(snd_tplg, verbose); +- +- err = snd_tplg_build_file(snd_tplg, source_file, output_file); ++ err = snd_tplg_load(*tplg, buf, pos); ++ free(buf); + if (err < 0) { +- fprintf(stderr, _("failed to compile context %s\n"), source_file); +- snd_tplg_free(snd_tplg); +- unlink(output_file); ++ fprintf(stderr, _("Unable to load configuration: %s\n"), ++ snd_strerror(-err)); ++ snd_tplg_free(*tplg); + return 1; + } + +- snd_tplg_free(snd_tplg); ++ return 0; ++ ++_nomem: ++ fprintf(stderr, _("No enough memory\n")); ++_err: ++ if (fd != fileno(stdin)) ++ close(fd); ++ free(buf); + return 1; + } + +-static int normalize(const char *source_file, const char *output_file, int sort) ++static int save(const char *output_file, void *buf, size_t size) + { +- snd_input_t *input; +- snd_output_t *output; +- snd_config_t *top, *norm; +- int err; ++ char *fname = NULL; ++ int fd; ++ ssize_t r; + +- err = snd_input_stdio_open(&input, source_file, "r"); +- if (err < 0) { +- fprintf(stderr, "Unable to open source file '%s': %s\n", source_file, snd_strerror(-err)); +- return 0; ++ if (strcmp(output_file, "-") == 0) { ++ fd = fileno(stdout); ++ } else { ++ fname = alloca(strlen(output_file) + 5); ++ strcpy(fname, output_file); ++ strcat(fname, ".new"); ++ fd = open(fname, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); ++ if (fd < 0) { ++ fprintf(stderr, _("Unable to open output file '%s': %s\n"), ++ fname, strerror(-errno)); ++ return 1; ++ } + } + +- err = snd_config_top(&top); +- if (err < 0) { +- snd_input_close(input); +- return 1; ++ r = 0; ++ while (size > 0) { ++ r = write(fd, buf, size); ++ if (r < 0 && (errno == EAGAIN || errno == EINTR)) ++ continue; ++ if (r < 0) ++ break; ++ size -= r; ++ buf += r; + } + +- err = snd_config_load(top, input); +- snd_input_close(input); +- if (err < 0) { +- snd_config_delete(top); +- fprintf(stderr, "Unable to parse source file '%s': %s\n", source_file, snd_strerror(-err)); +- snd_config_delete(top); ++ if (r < 0) { ++ fprintf(stderr, _("Write error: %s\n"), strerror(-errno)); ++ if (fd != fileno(stdout)) { ++ remove(fname); ++ close(fd); ++ } + return 1; + } + +- err = snd_output_stdio_open(&output, output_file, "w+"); +- if (err < 0) { +- fprintf(stderr, "Unable to open output file '%s': %s\n", output_file, snd_strerror(-err)); +- snd_config_delete(top); +- return 1; +- } ++ if (fd != fileno(stdout)) ++ close(fd); + +- norm = normalize_config(NULL, top, sort); +- if (norm == NULL) { +- fprintf(stderr, "Unable to normalize configuration (out of memory?)\n"); +- snd_output_close(output); +- snd_config_delete(top); ++ if (fname && rename(fname, output_file)) { ++ fprintf(stderr, _("Unable to rename file '%s' to '%s': %s\n"), ++ fname, output_file, strerror(-errno)); + return 1; + } + +- err = snd_config_save(norm, output); +- snd_output_close(output); +- snd_config_delete(norm); +- snd_config_delete(top); ++ return 0; ++} ++ ++static int dump(const char *source_file, const char *output_file, int cflags, int sflags) ++{ ++ snd_tplg_t *tplg; ++ char *text; ++ int err; ++ ++ err = load(&tplg, source_file, cflags); ++ if (err) ++ return err; ++ err = snd_tplg_save(tplg, &text, sflags); ++ snd_tplg_free(tplg); + if (err < 0) { +- fprintf(stderr, "Unable to save normalized contents: %s\n", snd_strerror(-err)); ++ fprintf(stderr, _("Unable to save parsed configuration: %s\n"), ++ snd_strerror(-err)); + return 1; + } ++ err = save(output_file, text, strlen(text)); ++ free(text); ++ return err; ++} + +- return 0; ++static int compile(const char *source_file, const char *output_file, int cflags) ++{ ++ snd_tplg_t *tplg; ++ void *bin; ++ size_t size; ++ int err; ++ ++ err = load(&tplg, source_file, cflags); ++ if (err) ++ return err; ++ err = snd_tplg_build_bin(tplg, &bin, &size); ++ snd_tplg_free(tplg); ++ if (err < 0 || size == 0) { ++ fprintf(stderr, _("failed to compile context %s\n"), source_file); ++ return 1; ++ } ++ err = save(output_file, bin, size); ++ free(bin); ++ return err; + } + ++#define OP_COMPILE 1 ++#define OP_NORMALIZE 2 ++#define OP_DUMP 3 ++ + int main(int argc, char *argv[]) + { +- static const char short_options[] = "hc:n:v:o:s"; ++ static const char short_options[] = "hc:n:u:v:o:sgxz"; + static const struct option long_options[] = { + {"help", 0, NULL, 'h'}, + {"verbose", 1, NULL, 'v'}, + {"compile", 1, NULL, 'c'}, + {"normalize", 1, NULL, 'n'}, ++ {"dump", 1, NULL, 'u'}, + {"output", 1, NULL, 'o'}, + {"sort", 0, NULL, 's'}, ++ {"group", 0, NULL, 'g'}, ++ {"nocheck", 0, NULL, 'x'}, ++ {"dapm-nosort", 0, NULL, 'z'}, + {0, 0, 0, 0}, + }; +- char *source_file = NULL, *normalize_file = NULL, *output_file = NULL; +- int c, err, verbose = 0, sort = 0, option_index; ++ char *source_file = NULL; ++ char *output_file = NULL; ++ int c, err, op = 'c', cflags = 0, sflags = 0, option_index; + + #ifdef ENABLE_NLS + setlocale(LC_ALL, ""); +@@ -218,19 +259,32 @@ int main(int argc, char *argv[]) + usage(argv[0]); + return 0; + case 'v': +- verbose = atoi(optarg); ++ cflags |= SND_TPLG_CREATE_VERBOSE; + break; +- case 'c': +- source_file = optarg; ++ case 'z': ++ cflags |= SND_TPLG_CREATE_DAPM_NOSORT; + break; ++ case 'c': + case 'n': +- normalize_file = optarg; ++ case 'u': ++ if (source_file) { ++ fprintf(stderr, _("Cannot combine operations (compile, normalize, dump)\n")); ++ return 1; ++ } ++ source_file = optarg; ++ op = c; + break; + case 'o': + output_file = optarg; + break; + case 's': +- sort = 1; ++ sflags |= SND_TPLG_SAVE_SORT; ++ break; ++ case 'g': ++ sflags |= SND_TPLG_SAVE_GROUPS; ++ break; ++ case 'x': ++ sflags |= SND_TPLG_SAVE_NOCHECK; + break; + default: + fprintf(stderr, _("Try `%s --help' for more information.\n"), argv[0]); +@@ -238,21 +292,29 @@ int main(int argc, char *argv[]) + } + } + +- if (source_file && normalize_file) { +- fprintf(stderr, "Cannot normalize and compile at a time!\n"); ++ if (source_file == NULL || output_file == NULL) { ++ usage(argv[0]); + return 1; + } + +- if ((source_file == NULL && normalize_file == NULL) || output_file == NULL) { +- usage(argv[0]); +- return 1; ++ if (op == 'n') { ++ if (sflags != 0 && sflags != SND_TPLG_SAVE_SORT) { ++ fprintf(stderr, _("Wrong parameters for the normalize operation!\n")); ++ return 1; ++ } ++ /* normalize has predefined output */ ++ sflags = SND_TPLG_SAVE_SORT; + } + +- if (source_file) +- err = compile(source_file, output_file, verbose); +- else +- err = normalize(normalize_file, output_file, sort); ++ switch (op) { ++ case 'c': ++ err = compile(source_file, output_file, cflags); ++ break; ++ default: ++ err = dump(source_file, output_file, cflags, sflags); ++ break; ++ } + + snd_output_close(log); +- return 0; ++ return err ? 1 : 0; + } +-- +2.16.4 + diff --git a/0028-alsatplg-add-V-version-option.patch b/0028-alsatplg-add-V-version-option.patch new file mode 100644 index 0000000..76d6e40 --- /dev/null +++ b/0028-alsatplg-add-V-version-option.patch @@ -0,0 +1,93 @@ +From 32e7016fd710f6ed9d514100c7c05453974036d0 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 20 Dec 2019 15:23:27 +0100 +Subject: [PATCH 28/35] alsatplg: add -V,--version option + +Signed-off-by: Jaroslav Kysela +--- + topology/alsatplg.rst | 3 +++ + topology/topology.c | 20 ++++++++++++++++++-- + 2 files changed, 21 insertions(+), 2 deletions(-) + +diff --git a/topology/alsatplg.rst b/topology/alsatplg.rst +index e09c865cc9b2..260454bfc526 100644 +--- a/topology/alsatplg.rst ++++ b/topology/alsatplg.rst +@@ -47,6 +47,9 @@ Available options: + **-h**, **--help** + this help + ++ **-V**, **--version** ++ show the utility version and versions of used libraries ++ + **-c**, **--compile** `FILE` + source configuration file for the compilation + +diff --git a/topology/topology.c b/topology/topology.c +index a94941ae762e..101f8ccf16ea 100644 +--- a/topology/topology.c ++++ b/topology/topology.c +@@ -34,10 +34,11 @@ + #include + #include + #include "gettext.h" ++#include "version.h" + + static snd_output_t *log; + +-static void usage(char *name) ++static void usage(const char *name) + { + printf( + _("Usage: %s [OPTIONS]...\n" +@@ -51,9 +52,20 @@ _("Usage: %s [OPTIONS]...\n" + "-s, --sort sort the identifiers in the normalized output\n" + "-g, --group save configuration by group indexes\n" + "-x, --nocheck save configuration without additional integrity checks\n" ++"-V, --version print version\n" + ), name); + } + ++static void version(const char *name) ++{ ++ printf( ++_("%s version %s\n" ++"libasound version %s\n" ++"libatopology version %s\n" ++), name, SND_UTIL_VERSION_STR, ++ snd_asoundlib_version(), snd_tplg_version()); ++} ++ + static int load(snd_tplg_t **tplg, const char *source_file, int cflags) + { + int fd, err; +@@ -227,7 +239,7 @@ static int compile(const char *source_file, const char *output_file, int cflags) + + int main(int argc, char *argv[]) + { +- static const char short_options[] = "hc:n:u:v:o:sgxz"; ++ static const char short_options[] = "hc:n:u:v:o:sgxzV"; + static const struct option long_options[] = { + {"help", 0, NULL, 'h'}, + {"verbose", 1, NULL, 'v'}, +@@ -239,6 +251,7 @@ int main(int argc, char *argv[]) + {"group", 0, NULL, 'g'}, + {"nocheck", 0, NULL, 'x'}, + {"dapm-nosort", 0, NULL, 'z'}, ++ {"version", 0, NULL, 'V'}, + {0, 0, 0, 0}, + }; + char *source_file = NULL; +@@ -286,6 +299,9 @@ int main(int argc, char *argv[]) + case 'x': + sflags |= SND_TPLG_SAVE_NOCHECK; + break; ++ case 'V': ++ version(argv[0]); ++ return 0; + default: + fprintf(stderr, _("Try `%s --help' for more information.\n"), argv[0]); + return 1; +-- +2.16.4 + diff --git a/0029-alsatplg-add-decode-command.patch b/0029-alsatplg-add-decode-command.patch new file mode 100644 index 0000000..fd30cb9 --- /dev/null +++ b/0029-alsatplg-add-decode-command.patch @@ -0,0 +1,237 @@ +From 786c3ee8144893dfb56b35c46542d3ded78d746c Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Sun, 22 Dec 2019 15:44:56 +0100 +Subject: [PATCH 29/35] alsatplg: add decode command + +Signed-off-by: Jaroslav Kysela +--- + topology/alsatplg.rst | 3 ++ + topology/topology.c | 111 ++++++++++++++++++++++++++++++++++++++------------ + 2 files changed, 87 insertions(+), 27 deletions(-) + +diff --git a/topology/alsatplg.rst b/topology/alsatplg.rst +index 260454bfc526..56324d52f883 100644 +--- a/topology/alsatplg.rst ++++ b/topology/alsatplg.rst +@@ -53,6 +53,9 @@ Available options: + **-c**, **--compile** `FILE` + source configuration file for the compilation + ++ **-d**, **--decode** `FILE` ++ source binary topology file for the decode ++ + **-n**, **--normalize** `FILE` + parse and save the configuration file in the normalized format + +diff --git a/topology/topology.c b/topology/topology.c +index 101f8ccf16ea..91d2fce655fe 100644 +--- a/topology/topology.c ++++ b/topology/topology.c +@@ -44,9 +44,10 @@ static void usage(const char *name) + _("Usage: %s [OPTIONS]...\n" + "\n" + "-h, --help help\n" +-"-c, --compile=FILE compile file\n" +-"-n, --normalize=FILE normalize file\n" +-"-u, --dump=FILE dump (reparse) file\n" ++"-c, --compile=FILE compile configuration file\n" ++"-d, --decode=FILE decode binary topology file\n" ++"-n, --normalize=FILE normalize configuration file\n" ++"-u, --dump=FILE dump (reparse) configuration file\n" + "-v, --verbose=LEVEL set verbosity level (0...1)\n" + "-o, --output=FILE set output file\n" + "-s, --sort sort the identifiers in the normalized output\n" +@@ -66,10 +67,10 @@ _("%s version %s\n" + snd_asoundlib_version(), snd_tplg_version()); + } + +-static int load(snd_tplg_t **tplg, const char *source_file, int cflags) ++static int load(const char *source_file, void **dst, size_t *dst_size) + { +- int fd, err; +- char *buf, *buf2; ++ int fd; ++ void *buf, *buf2; + size_t size, pos; + ssize_t r; + +@@ -112,15 +113,31 @@ static int load(snd_tplg_t **tplg, const char *source_file, int cflags) + goto _err; + } + ++ *dst = buf; ++ *dst_size = pos; ++ return 0; ++ ++_nomem: ++ fprintf(stderr, _("No enough memory\n")); ++_err: ++ if (fd != fileno(stdin)) ++ close(fd); ++ free(buf); ++ return 1; ++} ++ ++static int load_topology(snd_tplg_t **tplg, char *config, ++ size_t config_size, int cflags) ++{ ++ int err; ++ + *tplg = snd_tplg_create(cflags); + if (*tplg == NULL) { + fprintf(stderr, _("failed to create new topology context\n")); +- free(buf); + return 1; + } + +- err = snd_tplg_load(*tplg, buf, pos); +- free(buf); ++ err = snd_tplg_load(*tplg, config, config_size); + if (err < 0) { + fprintf(stderr, _("Unable to load configuration: %s\n"), + snd_strerror(-err)); +@@ -129,14 +146,6 @@ static int load(snd_tplg_t **tplg, const char *source_file, int cflags) + } + + return 0; +- +-_nomem: +- fprintf(stderr, _("No enough memory\n")); +-_err: +- if (fd != fileno(stdin)) +- close(fd); +- free(buf); +- return 1; + } + + static int save(const char *output_file, void *buf, size_t size) +@@ -194,10 +203,15 @@ static int save(const char *output_file, void *buf, size_t size) + static int dump(const char *source_file, const char *output_file, int cflags, int sflags) + { + snd_tplg_t *tplg; +- char *text; ++ char *config, *text; ++ size_t size; + int err; + +- err = load(&tplg, source_file, cflags); ++ err = load(source_file, (void **)&config, &size); ++ if (err) ++ return err; ++ err = load_topology(&tplg, config, size, cflags); ++ free(config); + if (err) + return err; + err = snd_tplg_save(tplg, &text, sflags); +@@ -215,17 +229,23 @@ static int dump(const char *source_file, const char *output_file, int cflags, in + static int compile(const char *source_file, const char *output_file, int cflags) + { + snd_tplg_t *tplg; ++ char *config; + void *bin; +- size_t size; ++ size_t config_size, size; + int err; + +- err = load(&tplg, source_file, cflags); ++ err = load(source_file, (void **)&config, &config_size); ++ if (err) ++ return err; ++ err = load_topology(&tplg, config, config_size, cflags); ++ free(config); + if (err) + return err; + err = snd_tplg_build_bin(tplg, &bin, &size); + snd_tplg_free(tplg); + if (err < 0 || size == 0) { +- fprintf(stderr, _("failed to compile context %s\n"), source_file); ++ fprintf(stderr, _("failed to compile context %s: %s\n"), ++ source_file, snd_strerror(-err)); + return 1; + } + err = save(output_file, bin, size); +@@ -233,17 +253,50 @@ static int compile(const char *source_file, const char *output_file, int cflags) + return err; + } + +-#define OP_COMPILE 1 +-#define OP_NORMALIZE 2 +-#define OP_DUMP 3 ++static int decode(const char *source_file, const char *output_file, ++ int cflags, int dflags, int sflags) ++{ ++ snd_tplg_t *tplg; ++ void *bin; ++ char *text; ++ size_t size; ++ int err; ++ ++ if (load(source_file, &bin, &size)) ++ return 1; ++ tplg = snd_tplg_create(cflags); ++ if (tplg == NULL) { ++ fprintf(stderr, _("failed to create new topology context\n")); ++ return 1; ++ } ++ err = snd_tplg_decode(tplg, bin, size, dflags); ++ free(bin); ++ if (err < 0) { ++ snd_tplg_free(tplg); ++ fprintf(stderr, _("failed to decode context %s: %s\n"), ++ source_file, snd_strerror(-err)); ++ return 1; ++ } ++ err = snd_tplg_save(tplg, &text, sflags); ++ snd_tplg_free(tplg); ++ if (err < 0) { ++ fprintf(stderr, _("Unable to save parsed configuration: %s\n"), ++ snd_strerror(-err)); ++ return 1; ++ } ++ err = save(output_file, text, strlen(text)); ++ free(text); ++ return err; ++} + + int main(int argc, char *argv[]) + { +- static const char short_options[] = "hc:n:u:v:o:sgxzV"; ++ static const char short_options[] = "hc:d:n:u:v:o:sgxzV"; + static const struct option long_options[] = { + {"help", 0, NULL, 'h'}, + {"verbose", 1, NULL, 'v'}, + {"compile", 1, NULL, 'c'}, ++ {"decode", 1, NULL, 'd'}, + {"normalize", 1, NULL, 'n'}, + {"dump", 1, NULL, 'u'}, + {"output", 1, NULL, 'o'}, +@@ -256,7 +309,7 @@ int main(int argc, char *argv[]) + }; + char *source_file = NULL; + char *output_file = NULL; +- int c, err, op = 'c', cflags = 0, sflags = 0, option_index; ++ int c, err, op = 'c', cflags = 0, dflags = 0, sflags = 0, option_index; + + #ifdef ENABLE_NLS + setlocale(LC_ALL, ""); +@@ -278,6 +331,7 @@ int main(int argc, char *argv[]) + cflags |= SND_TPLG_CREATE_DAPM_NOSORT; + break; + case 'c': ++ case 'd': + case 'n': + case 'u': + if (source_file) { +@@ -326,6 +380,9 @@ int main(int argc, char *argv[]) + case 'c': + err = compile(source_file, output_file, cflags); + break; ++ case 'd': ++ err = decode(source_file, output_file, cflags, dflags, sflags); ++ break; + default: + err = dump(source_file, output_file, cflags, sflags); + break; +-- +2.16.4 + diff --git a/0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch b/0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch new file mode 100644 index 0000000..5683389 --- /dev/null +++ b/0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch @@ -0,0 +1,25 @@ +From 56e1b879d4bccda62e7c0177b0a395d57a37931c Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Wed, 1 Jan 2020 17:45:06 +0100 +Subject: [PATCH 30/35] alsatplg: add documentation for -z,--dapm-nosort (-h) + +Signed-off-by: Jaroslav Kysela +--- + topology/topology.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/topology/topology.c b/topology/topology.c +index 91d2fce655fe..ad0d108562df 100644 +--- a/topology/topology.c ++++ b/topology/topology.c +@@ -53,6 +53,7 @@ _("Usage: %s [OPTIONS]...\n" + "-s, --sort sort the identifiers in the normalized output\n" + "-g, --group save configuration by group indexes\n" + "-x, --nocheck save configuration without additional integrity checks\n" ++"-z, --dapm-nosort do not sort the DAPM widgets\n" + "-V, --version print version\n" + ), name); + } +-- +2.16.4 + diff --git a/0031-configure-fix-new-libatopology-check.patch b/0031-configure-fix-new-libatopology-check.patch new file mode 100644 index 0000000..a0dab88 --- /dev/null +++ b/0031-configure-fix-new-libatopology-check.patch @@ -0,0 +1,36 @@ +From 996a638e04766df43cb8026673f93927b1047639 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 3 Jan 2020 23:46:51 +0100 +Subject: [PATCH 31/35] configure: fix new libatopology check + +--- + configure.ac | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 4bee49be81ba..b7ed81a0d32c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -49,6 +49,7 @@ AC_CHECK_LIB([asound], [snd_seq_client_info_get_pid], [HAVE_SEQ_CLIENT_INFO_GET_ + if test "$HAVE_SEQ_CLIENT_INFO_GET_PID" = "yes" ; then + AC_DEFINE([HAVE_SEQ_CLIENT_INFO_GET_PID], 1, [alsa-lib supports snd_seq_client_info_get_pid]) + fi ++AC_CHECK_LIB([atopology], [snd_tplg_save], [have_topology="no"]) + + # + # NOTE: The library 'libffado' (at least v2.4.1) executes ctor/dtor of instances +@@ -70,11 +71,6 @@ AM_CONDITIONAL(HAVE_TOPOLOGY, test "$have_topology" = "yes") + AM_CONDITIONAL(HAVE_SAMPLERATE, test "$have_samplerate" = "yes") + AM_CONDITIONAL(HAVE_FFADO, test "$have_ffado" = "yes") + +-# old libasound with the topology routines in the main library +-if test "x$have_topology" = "xyes" -a "x$ALSA_TOPOLOGY_LIBS" = "x"; then +- ALSA_TOPOLOGY_LIBS="$ALSA_LIBS" +-fi +- + dnl Use tinyalsa + alsabat_backend_tiny= + AC_ARG_ENABLE(alsabat_backend_tiny, +-- +2.16.4 + diff --git a/0032-Use-__func__-instead-of-__FUNCTION__.patch b/0032-Use-__func__-instead-of-__FUNCTION__.patch new file mode 100644 index 0000000..779d7cc --- /dev/null +++ b/0032-Use-__func__-instead-of-__FUNCTION__.patch @@ -0,0 +1,67 @@ +From f80a290153f210bb80165ac8dc6b1dccaa24781d Mon Sep 17 00:00:00 2001 +From: Michael Forney +Date: Wed, 5 Feb 2020 00:12:18 -0800 +Subject: [PATCH 32/35] Use __func__ instead of __FUNCTION__ + +They are equivalent, but __func__ is in C99. __FUNCTION__ exists only +for backwards compatibility with old gcc versions. + +Signed-off-by: Michael Forney +Reviewd-by: Takashi Sakamoto +Signed-off-by: Takashi Iwai +--- + alsactl/alsactl.h | 16 ++++++++-------- + aplay/aplay.c | 4 ++-- + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h +index 4f969ec2a4bc..69b539ca6be0 100644 +--- a/alsactl/alsactl.h ++++ b/alsactl/alsactl.h +@@ -13,15 +13,15 @@ void cerror_(const char *fcn, long line, int cond, const char *fmt, ...); + void dbg_(const char *fcn, long line, const char *fmt, ...); + + #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +-#define info(...) do { info_(__FUNCTION__, __LINE__, __VA_ARGS__); } while (0) +-#define error(...) do { error_(__FUNCTION__, __LINE__, __VA_ARGS__); } while (0) +-#define cerror(cond, ...) do { cerror_(__FUNCTION__, __LINE__, (cond) != 0, __VA_ARGS__); } while (0) +-#define dbg(...) do { dbg_(__FUNCTION__, __LINE__, __VA_ARGS__); } while (0) ++#define info(...) do { info_(__func__, __LINE__, __VA_ARGS__); } while (0) ++#define error(...) do { error_(__func__, __LINE__, __VA_ARGS__); } while (0) ++#define cerror(cond, ...) do { cerror_(__func__, __LINE__, (cond) != 0, __VA_ARGS__); } while (0) ++#define dbg(...) do { dbg_(__func__, __LINE__, __VA_ARGS__); } while (0) + #else +-#define info(args...) do { info_(__FUNCTION__, __LINE__, ##args); } while (0) +-#define error(args...) do { error_(__FUNCTION__, __LINE__, ##args); } while (0) +-#define cerror(cond, ...) do { error_(__FUNCTION__, __LINE__, (cond) != 0, ##args); } while (0) +-#define dbg(args...) do { dbg_(__FUNCTION__, __LINE__, ##args); } while (0) ++#define info(args...) do { info_(__func__, __LINE__, ##args); } while (0) ++#define error(args...) do { error_(__func__, __LINE__, ##args); } while (0) ++#define cerror(cond, ...) do { error_(__func__, __LINE__, (cond) != 0, ##args); } while (0) ++#define dbg(args...) do { dbg_(__func__, __LINE__, ##args); } while (0) + #endif + + int init(const char *file, const char *cardname); +diff --git a/aplay/aplay.c b/aplay/aplay.c +index 1a887e412aae..908093c45c90 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -186,13 +186,13 @@ static const struct fmt_capture { + + #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) + #define error(...) do {\ +- fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ ++ fprintf(stderr, "%s: %s:%d: ", command, __func__, __LINE__); \ + fprintf(stderr, __VA_ARGS__); \ + putc('\n', stderr); \ + } while (0) + #else + #define error(args...) do {\ +- fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \ ++ fprintf(stderr, "%s: %s:%d: ", command, __func__, __LINE__); \ + fprintf(stderr, ##args); \ + putc('\n', stderr); \ + } while (0) +-- +2.16.4 + diff --git a/0033-Avoid-pointer-arithmetic-on-void.patch b/0033-Avoid-pointer-arithmetic-on-void.patch new file mode 100644 index 0000000..4e2e71d --- /dev/null +++ b/0033-Avoid-pointer-arithmetic-on-void.patch @@ -0,0 +1,103 @@ +From 62a765087e3885a463dbf0d888c5d666da9ee7b3 Mon Sep 17 00:00:00 2001 +From: Michael Forney +Date: Wed, 5 Feb 2020 00:12:19 -0800 +Subject: [PATCH 33/35] Avoid pointer arithmetic on `void *` + +The pointer operand to the binary `+` operator must be to a complete +object type. + +Signed-off-by: Michael Forney +Reviewed-by: Takashi Sakamoto +Signed-off-by: Takashi Iwai +--- + aplay/aplay.c | 4 ++-- + axfer/xfer-libasound-irq-mmap.c | 7 ++++--- + axfer/xfer-libasound-timer-mmap.c | 4 ++-- + bat/common.c | 2 +- + seq/aplaymidi/aplaymidi.c | 2 +- + 5 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index 908093c45c90..08395f695287 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -442,7 +442,7 @@ static ssize_t xwrite(int fd, const void *buf, size_t count) + size_t offset = 0; + + while (offset < count) { +- written = write(fd, buf + offset, count - offset); ++ written = write(fd, (char *)buf + offset, count - offset); + if (written <= 0) + return written; + +@@ -1210,7 +1210,7 @@ static int test_au(int fd, void *buffer) + hwparams.channels = BE_INT(ap->channels); + if (hwparams.channels < 1 || hwparams.channels > 256) + return -1; +- if ((size_t)safe_read(fd, buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) != BE_INT(ap->hdr_size) - sizeof(AuHeader)) { ++ if ((size_t)safe_read(fd, (char *)buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) != BE_INT(ap->hdr_size) - sizeof(AuHeader)) { + error(_("read error")); + prg_exit(EXIT_FAILURE); + } +diff --git a/axfer/xfer-libasound-irq-mmap.c b/axfer/xfer-libasound-irq-mmap.c +index a13b3c300354..386e741de733 100644 +--- a/axfer/xfer-libasound-irq-mmap.c ++++ b/axfer/xfer-libasound-irq-mmap.c +@@ -146,9 +146,10 @@ static int irq_mmap_process_frames(struct libasound_state *state, + // TODO: Perhaps, the complex layout can be supported as a variation of + // vector type. However, there's no driver with this layout. + if (layout->vector == NULL) { +- frame_buf = areas[0].addr; +- frame_buf += snd_pcm_frames_to_bytes(state->handle, +- frame_offset); ++ char *buf; ++ buf = areas[0].addr; ++ buf += snd_pcm_frames_to_bytes(state->handle, frame_offset); ++ frame_buf = buf; + } else { + int i; + for (i = 0; i < layout->samples_per_frame; ++i) { +diff --git a/axfer/xfer-libasound-timer-mmap.c b/axfer/xfer-libasound-timer-mmap.c +index 1c642fe58b28..ba26e2995f5f 100644 +--- a/axfer/xfer-libasound-timer-mmap.c ++++ b/axfer/xfer-libasound-timer-mmap.c +@@ -100,8 +100,8 @@ static void *get_buffer(struct libasound_state *state, + + if (layout->vector == NULL) { + char *buf; +- buf = areas[0].addr + snd_pcm_frames_to_bytes(state->handle, +- frame_offset); ++ buf = areas[0].addr; ++ buf += snd_pcm_frames_to_bytes(state->handle, frame_offset); + frame_buf = buf; + } else { + int i; +diff --git a/bat/common.c b/bat/common.c +index d3d1f285449c..339e749fd74a 100644 +--- a/bat/common.c ++++ b/bat/common.c +@@ -231,7 +231,7 @@ int generate_input_data(struct bat *bat, void *buffer, int bytes, int frames) + load = 0; + + while (1) { +- err = fread(buffer + load, 1, bytes - load, bat->fp); ++ err = fread((char *)buffer + load, 1, bytes - load, bat->fp); + if (0 == err) { + if (feof(bat->fp)) { + fprintf(bat->log, +diff --git a/seq/aplaymidi/aplaymidi.c b/seq/aplaymidi/aplaymidi.c +index 12d6fac3b0dc..b086e7015aa2 100644 +--- a/seq/aplaymidi/aplaymidi.c ++++ b/seq/aplaymidi/aplaymidi.c +@@ -633,7 +633,7 @@ static void handle_big_sysex(snd_seq_event_t *ev) + check_snd("sync output", err); + if (sleep(1)) + fatal("aborted"); +- ev->data.ext.ptr += MIDI_BYTES_PER_SEC; ++ ev->data.ext.ptr = (char *)ev->data.ext.ptr + MIDI_BYTES_PER_SEC; + length -= MIDI_BYTES_PER_SEC; + } + ev->data.ext.len = length; +-- +2.16.4 + diff --git a/0034-Use-lli-for-long-long-in-printf.patch b/0034-Use-lli-for-long-long-in-printf.patch new file mode 100644 index 0000000..dd9f71e --- /dev/null +++ b/0034-Use-lli-for-long-long-in-printf.patch @@ -0,0 +1,59 @@ +From 646b3b1c0badbfd1b2ea7b82eb59d43a460c531c Mon Sep 17 00:00:00 2001 +From: Michael Forney +Date: Wed, 5 Feb 2020 00:12:20 -0800 +Subject: [PATCH 34/35] Use %lli for long long in printf + +The `L` length modifier only applies to floating-point conversion +specifiers, and `ll` is used for `long long` integers. + +Although glibc accepts %Li, musl does not and returns EINVAL. + +Signed-off-by: Michael Forney +Reviewed-by: Takashi Sakamoto +Signed-off-by: Takashi Iwai +--- + alsactl/state.c | 4 ++-- + amixer/amixer.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/alsactl/state.c b/alsactl/state.c +index 38e85c06c0b0..22e0269fd30a 100644 +--- a/alsactl/state.c ++++ b/alsactl/state.c +@@ -336,9 +336,9 @@ static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *t + long long max = snd_ctl_elem_info_get_max64(info); + long long step = snd_ctl_elem_info_get_step64(info); + if (step) +- sprintf(buf, "%Li - %Li (step %Li)", min, max, step); ++ sprintf(buf, "%lli - %lli (step %lli)", min, max, step); + else +- sprintf(buf, "%Li - %Li", min, max); ++ sprintf(buf, "%lli - %lli", min, max); + err = snd_config_string_add(comment, "range", buf); + if (err < 0) { + error("snd_config_string_add: %s", snd_strerror(err)); +diff --git a/amixer/amixer.c b/amixer/amixer.c +index 928f7c5d6482..4c19a583e5b1 100644 +--- a/amixer/amixer.c ++++ b/amixer/amixer.c +@@ -620,7 +620,7 @@ static int show_control(const char *space, snd_hctl_elem_t *elem, + snd_ctl_elem_info_get_step(info)); + break; + case SND_CTL_ELEM_TYPE_INTEGER64: +- printf(",min=%Li,max=%Li,step=%Li\n", ++ printf(",min=%lli,max=%lli,step=%lli\n", + snd_ctl_elem_info_get_min64(info), + snd_ctl_elem_info_get_max64(info), + snd_ctl_elem_info_get_step64(info)); +@@ -662,7 +662,7 @@ static int show_control(const char *space, snd_hctl_elem_t *elem, + printf("%li", snd_ctl_elem_value_get_integer(control, idx)); + break; + case SND_CTL_ELEM_TYPE_INTEGER64: +- printf("%Li", snd_ctl_elem_value_get_integer64(control, idx)); ++ printf("%lli", snd_ctl_elem_value_get_integer64(control, idx)); + break; + case SND_CTL_ELEM_TYPE_ENUMERATED: + printf("%u", snd_ctl_elem_value_get_enumerated(control, idx)); +-- +2.16.4 + diff --git a/0035-Avoid-empty-initializer-list.patch b/0035-Avoid-empty-initializer-list.patch new file mode 100644 index 0000000..9e2f06a --- /dev/null +++ b/0035-Avoid-empty-initializer-list.patch @@ -0,0 +1,86 @@ +From cb47f6dcf4200c64559ed2f008cabf8cc5f9d9a3 Mon Sep 17 00:00:00 2001 +From: Michael Forney +Date: Wed, 5 Feb 2020 00:12:21 -0800 +Subject: [PATCH 35/35] Avoid empty initializer list + +To zero-initialize an object, use `{0}` instead. + +Signed-off-by: Michael Forney +Reviewed-by: Takashi Sakamoto +Signed-off-by: Takashi Iwai +--- + alsamixer/cli.c | 2 +- + amidi/amidi.c | 2 +- + seq/aplaymidi/aplaymidi.c | 2 +- + seq/aplaymidi/arecordmidi.c | 2 +- + seq/aseqdump/aseqdump.c | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/alsamixer/cli.c b/alsamixer/cli.c +index 3f8f52f03d4d..74683255a30a 100644 +--- a/alsamixer/cli.c ++++ b/alsamixer/cli.c +@@ -58,7 +58,7 @@ static void parse_options(int argc, char *argv[]) + { .name = "view", .has_arg = 1, .val = 'V' }, + { .name = "no-color", .val = 'g' }, + { .name = "abstraction", .has_arg = 1, .val = 'a' }, +- { } ++ { 0 } + }; + int option; + int card_index; +diff --git a/amidi/amidi.c b/amidi/amidi.c +index c6268e4c2ccd..cde4697c7e30 100644 +--- a/amidi/amidi.c ++++ b/amidi/amidi.c +@@ -469,7 +469,7 @@ int main(int argc, char *argv[]) + {"active-sensing", 0, NULL, 'a'}, + {"clock", 0, NULL, 'c'}, + {"sysex-interval", 1, NULL, 'i'}, +- { } ++ {0} + }; + int c, err, ok = 0; + int ignore_active_sensing = 1; +diff --git a/seq/aplaymidi/aplaymidi.c b/seq/aplaymidi/aplaymidi.c +index b086e7015aa2..e8491e13148d 100644 +--- a/seq/aplaymidi/aplaymidi.c ++++ b/seq/aplaymidi/aplaymidi.c +@@ -869,7 +869,7 @@ int main(int argc, char *argv[]) + {"list", 0, NULL, 'l'}, + {"port", 1, NULL, 'p'}, + {"delay", 1, NULL, 'd'}, +- {} ++ {0} + }; + int c; + int do_list = 0; +diff --git a/seq/aplaymidi/arecordmidi.c b/seq/aplaymidi/arecordmidi.c +index 604cd0d29722..2034df76b679 100644 +--- a/seq/aplaymidi/arecordmidi.c ++++ b/seq/aplaymidi/arecordmidi.c +@@ -740,7 +740,7 @@ int main(int argc, char *argv[]) + {"metronome", 1, NULL, 'm'}, + {"timesig", 1, NULL, 'i'}, + {"num-events", 1, NULL, 'n'}, +- { } ++ {0} + }; + + char *filename = NULL; +diff --git a/seq/aseqdump/aseqdump.c b/seq/aseqdump/aseqdump.c +index 578e06fbcb22..44ae3bbc5654 100644 +--- a/seq/aseqdump/aseqdump.c ++++ b/seq/aseqdump/aseqdump.c +@@ -357,7 +357,7 @@ int main(int argc, char *argv[]) + {"version", 0, NULL, 'V'}, + {"list", 0, NULL, 'l'}, + {"port", 1, NULL, 'p'}, +- { } ++ {0} + }; + + int do_list = 0; +-- +2.16.4 + diff --git a/alsa-utils.changes b/alsa-utils.changes index 232ec51..6ec7430 100644 --- a/alsa-utils.changes +++ b/alsa-utils.changes @@ -1,3 +1,19 @@ +------------------------------------------------------------------- +Wed Feb 12 20:57:05 CET 2020 - tiwai@suse.de + +- Backport upstream fixes: + alsatplg fixes, misc cleanups: + 0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch + 0028-alsatplg-add-V-version-option.patch + 0029-alsatplg-add-decode-command.patch + 0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch + 0031-configure-fix-new-libatopology-check.patch + 0032-Use-__func__-instead-of-__FUNCTION__.patch + 0033-Avoid-pointer-arithmetic-on-void.patch + 0034-Use-lli-for-long-long-in-printf.patch + 0035-Avoid-empty-initializer-list.patch +- Fix build on SLE12-* target + ------------------------------------------------------------------- Tue Jan 21 15:57:03 CET 2020 - tiwai@suse.de diff --git a/alsa-utils.spec b/alsa-utils.spec index b94aed5..86c36bb 100644 --- a/alsa-utils.spec +++ b/alsa-utils.spec @@ -55,6 +55,15 @@ Patch23: 0023-alsa-info.sh-Condense-nested-commands-for-file-uploa.patch Patch24: 0024-alsa-info.sh-Condense-nested-commands-for-formatting.patch Patch25: 0025-alsa-info.sh-Perform-test-for-wget-earlier.patch Patch26: 0026-alsa-info.sh-Warn-after-actual-upload-failure-do-not.patch +Patch27: 0027-alsatplg-rewrite-to-use-the-new-libatopology-functio.patch +Patch28: 0028-alsatplg-add-V-version-option.patch +Patch29: 0029-alsatplg-add-decode-command.patch +Patch30: 0030-alsatplg-add-documentation-for-z-dapm-nosort-h.patch +Patch31: 0031-configure-fix-new-libatopology-check.patch +Patch32: 0032-Use-__func__-instead-of-__FUNCTION__.patch +Patch33: 0033-Avoid-pointer-arithmetic-on-void.patch +Patch34: 0034-Use-lli-for-long-long-in-printf.patch +Patch35: 0035-Avoid-empty-initializer-list.patch Patch101: alsa-utils-configure-version-revert.patch BuildRequires: alsa-devel BuildRequires: alsa-topology-devel @@ -62,7 +71,11 @@ BuildRequires: fftw3-devel BuildRequires: libsamplerate-devel BuildRequires: ncurses-devel BuildRequires: pkgconfig +%if 0%{?suse_version} < 1500 +BuildRequires: python-docutils +%else BuildRequires: python3-docutils +%endif BuildRequires: xmlto BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(udev) @@ -117,6 +130,15 @@ and test audio before and after PM state changes. %patch24 -p1 %patch25 -p1 %patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 %if 0%{?do_autoreconf} %patch101 -p1 # fix stupid automake's automatic action