Helps making pulseaudio relocatable --- src/modules/alsa/alsa-mixer.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index 3dbf6b1..92eaabe 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -2507,8 +2507,15 @@ static int path_verify(pa_alsa_path *p) { static const char *get_default_paths_dir(void) { if (pa_run_from_build_tree()) return PA_SRCDIR "/modules/alsa/mixer/paths/"; - else - return PA_ALSA_PATHS_DIR; + else { + static const char *paths_dir = NULL; + if (!paths_dir) { + paths_dir = getenv("PA_ALSA_PATHS_DIR"); + if (!paths_dir) + paths_dir = PA_ALSA_PATHS_DIR; + } + return paths_dir; + } } pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa_direction_t direction) { @@ -4333,6 +4340,20 @@ void pa_alsa_decibel_fix_dump(pa_alsa_decibel_fix *db_fix) { pa_xfree(db_values); } +static const char *alsa_profile_sets_dir() { + if (pa_run_from_build_tree()) + return PA_SRCDIR "/modules/alsa/mixer/profile-sets/"; + else { + static const char *profile_sets_dir = NULL; + if (!profile_sets_dir) { + profile_sets_dir = getenv("PA_ALSA_PROFILE_SETS_DIR"); + if (!profile_sets_dir) + profile_sets_dir = PA_ALSA_PROFILE_SETS_DIR; + } + return profile_sets_dir; + } +} + pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel_map *bonus) { pa_alsa_profile_set *ps; pa_alsa_profile *p; @@ -4383,9 +4404,7 @@ pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel if (!fname) fname = "default.conf"; - fn = pa_maybe_prefix_path(fname, - pa_run_from_build_tree() ? PA_SRCDIR "/modules/alsa/mixer/profile-sets/" : - PA_ALSA_PROFILE_SETS_DIR); + fn = pa_maybe_prefix_path(fname, alsa_profile_sets_dir()); r = pa_config_parse(fn, NULL, items, NULL, false, ps); pa_xfree(fn); -- 2.10.2