Commit b310092e authored by Jaroslav Kysela's avatar Jaroslav Kysela Committed by Takashi Iwai

selftests: alsa - move shared library configuration code to conf.c

The minimal alsa-lib configuration code is similar in both mixer
and pcm tests. Move this code to the shared conf.c source file.

Also, fix the build rules inspired by rseq tests. Build libatest.so
which is linked to the both test utilities dynamically.

Also, set the TEST_FILES variable for lib.mk.

Cc: linux-kselftest@vger.kernel.org
Cc: Shuah Khan <shuah@kernel.org>
Reported-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
Tested-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20221129085306.2345763-1-perex@perex.czSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 67df411d
......@@ -6,9 +6,20 @@ LDLIBS += $(shell pkg-config --libs alsa)
ifeq ($(LDLIBS),)
LDLIBS += -lasound
endif
CFLAGS += -L$(OUTPUT) -Wl,-rpath=./
OVERRIDE_TARGETS = 1
TEST_GEN_PROGS := mixer-test pcm-test
pcm-test: pcm-test.c conf.c
TEST_GEN_PROGS_EXTENDED := libatest.so
TEST_FILES := conf.d
include ../lib.mk
$(OUTPUT)/libatest.so: conf.c alsa-local.h
$(CC) $(CFLAGS) -shared -fPIC $< $(LDLIBS) -o $@
$(OUTPUT)/%: %.c $(TEST_GEN_PROGS_EXTENDED) alsa-local.h
$(CC) $(CFLAGS) $< $(LDLIBS) -latest -o $@
......@@ -10,6 +10,8 @@
#include <alsa/asoundlib.h>
snd_config_t *get_alsalib_config(void);
void conf_load(void);
void conf_free(void);
snd_config_t *conf_by_card(int card);
......
......@@ -28,6 +28,75 @@ struct card_data {
static struct card_data *conf_cards;
static const char *alsa_config =
"ctl.hw {\n"
" @args [ CARD ]\n"
" @args.CARD.type string\n"
" type hw\n"
" card $CARD\n"
"}\n"
"pcm.hw {\n"
" @args [ CARD DEV SUBDEV ]\n"
" @args.CARD.type string\n"
" @args.DEV.type integer\n"
" @args.SUBDEV.type integer\n"
" type hw\n"
" card $CARD\n"
" device $DEV\n"
" subdevice $SUBDEV\n"
"}\n"
;
#ifdef SND_LIB_VER
#if SND_LIB_VERSION >= SND_LIB_VER(1, 2, 6)
#define LIB_HAS_LOAD_STRING
#endif
#endif
#ifndef LIB_HAS_LOAD_STRING
static int snd_config_load_string(snd_config_t **config, const char *s,
size_t size)
{
snd_input_t *input;
snd_config_t *dst;
int err;
assert(config && s);
if (size == 0)
size = strlen(s);
err = snd_input_buffer_open(&input, s, size);
if (err < 0)
return err;
err = snd_config_top(&dst);
if (err < 0) {
snd_input_close(input);
return err;
}
err = snd_config_load(dst, input);
snd_input_close(input);
if (err < 0) {
snd_config_delete(dst);
return err;
}
*config = dst;
return 0;
}
#endif
snd_config_t *get_alsalib_config(void)
{
snd_config_t *config;
int err;
err = snd_config_load_string(&config, alsa_config, strlen(alsa_config));
if (err < 0) {
ksft_print_msg("Unable to parse custom alsa-lib configuration: %s\n",
snd_strerror(err));
ksft_exit_fail();
}
return config;
}
static struct card_data *conf_data_by_card(int card, bool msg)
{
struct card_data *conf;
......
......@@ -26,6 +26,7 @@
#include <stdint.h>
#include "../kselftest.h"
#include "alsa-local.h"
#define TESTS_PER_CONTROL 7
......@@ -50,56 +51,11 @@ struct ctl_data {
struct ctl_data *next;
};
static const char *alsa_config =
"ctl.hw {\n"
" @args [ CARD ]\n"
" @args.CARD.type string\n"
" type hw\n"
" card $CARD\n"
"}\n"
;
int num_cards = 0;
int num_controls = 0;
struct card_data *card_list = NULL;
struct ctl_data *ctl_list = NULL;
#ifdef SND_LIB_VER
#if SND_LIB_VERSION >= SND_LIB_VER(1, 2, 6)
#define LIB_HAS_LOAD_STRING
#endif
#endif
#ifndef LIB_HAS_LOAD_STRING
static int snd_config_load_string(snd_config_t **config, const char *s,
size_t size)
{
snd_input_t *input;
snd_config_t *dst;
int err;
assert(config && s);
if (size == 0)
size = strlen(s);
err = snd_input_buffer_open(&input, s, size);
if (err < 0)
return err;
err = snd_config_top(&dst);
if (err < 0) {
snd_input_close(input);
return err;
}
err = snd_config_load(dst, input);
snd_input_close(input);
if (err < 0) {
snd_config_delete(dst);
return err;
}
*config = dst;
return 0;
}
#endif
static void find_controls(void)
{
char name[32];
......@@ -112,12 +68,7 @@ static void find_controls(void)
if (snd_card_next(&card) < 0 || card < 0)
return;
err = snd_config_load_string(&config, alsa_config, strlen(alsa_config));
if (err < 0) {
ksft_print_msg("Unable to parse custom alsa-lib configuration: %s\n",
snd_strerror(err));
ksft_exit_fail();
}
config = get_alsalib_config();
while (card >= 0) {
sprintf(name, "hw:%d", card);
......
......@@ -31,26 +31,6 @@ struct pcm_data {
struct pcm_data *next;
};
static const char *alsa_config =
"ctl.hw {\n"
" @args [ CARD ]\n"
" @args.CARD.type string\n"
" type hw\n"
" card $CARD\n"
"}\n"
"pcm.hw {\n"
" @args [ CARD DEV SUBDEV ]\n"
" @args.CARD.type string\n"
" @args.DEV.type integer\n"
" @args.SUBDEV.type integer\n"
" type hw\n"
" card $CARD\n"
" device $DEV\n"
" subdevice $SUBDEV\n"
"}\n"
;
int num_pcms = 0;
struct pcm_data *pcm_list = NULL;
......@@ -77,56 +57,6 @@ long long timestamp_diff_ms(timestamp_t *tstamp)
return (diff.tv_sec * 1000) + ((diff.tv_nsec + 500000L) / 1000000L);
}
#ifdef SND_LIB_VER
#if SND_LIB_VERSION >= SND_LIB_VER(1, 2, 6)
#define LIB_HAS_LOAD_STRING
#endif
#endif
#ifndef LIB_HAS_LOAD_STRING
static int snd_config_load_string(snd_config_t **config, const char *s,
size_t size)
{
snd_input_t *input;
snd_config_t *dst;
int err;
assert(config && s);
if (size == 0)
size = strlen(s);
err = snd_input_buffer_open(&input, s, size);
if (err < 0)
return err;
err = snd_config_top(&dst);
if (err < 0) {
snd_input_close(input);
return err;
}
err = snd_config_load(dst, input);
snd_input_close(input);
if (err < 0) {
snd_config_delete(dst);
return err;
}
*config = dst;
return 0;
}
#endif
static snd_config_t *get_alsalib_config(void)
{
snd_config_t *config;
int err;
err = snd_config_load_string(&config, alsa_config, strlen(alsa_config));
if (err < 0) {
ksft_print_msg("Unable to parse custom alsa-lib configuration: %s\n",
snd_strerror(err));
ksft_exit_fail();
}
return config;
}
static long device_from_id(snd_config_t *node)
{
const char *id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment