diff -NurpP -x compile -x '*-config' -x '*.Tpo' -x '.*' -x 'output.*' -x autom4te.cache -x '*.orig' -x '*.o' -x '*.so*' -x '*.a' -x missing -x install-sh -x depcomp -x core -x '*~' -x '*.m4' -x 'config.*' -x configure -x '*.sh' -x libtool -x 'Makefile*' -x 'stamp*' xmms-1.2.10.orig/xmms/main.c xmms-1.2.10/xmms/main.c --- xmms-1.2.10.orig/xmms/main.c 2005-07-23 02:07:34 +0500 +++ xmms-1.2.10/xmms/main.c 2005-07-23 03:49:03 +0500 @@ -303,6 +303,66 @@ static const int mainwin_general_menu_en sizeof(mainwin_general_menu_entries) / sizeof(mainwin_general_menu_entries[0]); +#include +#include + +/* Check if alsa is configured */ +static int alsa_configured(void) +{ + void *alsa_handle; + int (*mixer_open)(snd_mixer_t **mixer, int mode); + int (*mixer_close)(snd_mixer_t *mixer); + int (*mixer_attach)(snd_mixer_t *mixer, const char *name); + int (*mixer_detach)(snd_mixer_t *mixer, const char *name); + char buf[64]; + int ret; + int err; + int i; + snd_mixer_t *handle; + snd_ctl_t *control; + + ret = 0; + + alsa_handle = dlopen("libasound.so", RTLD_NOW); + if (!alsa_handle) + return 0; + + mixer_open = dlsym(alsa_handle, "snd_mixer_open"); + mixer_close = dlsym(alsa_handle, "snd_mixer_close"); + mixer_attach = dlsym(alsa_handle, "snd_mixer_attach"); + mixer_detach = dlsym(alsa_handle, "snd_mixer_detach"); + if (!mixer_open || !mixer_close || + !mixer_attach || !mixer_detach) + { + dlclose(alsa_handle); + return 0; + } + + if ((err = mixer_open(&handle, 0)) < 0) + { + dlclose(alsa_handle); + return 0; + } + + for (i = 0; i < 32; i++) + { + snprintf(buf, 64, "hw:%d", i); + + if (mixer_attach(handle, buf) < 0) + continue; + + if (mixer_detach(handle, buf) < 0) + continue; + + ret = 1; + break; + } + + mixer_close(handle); + dlclose(alsa_handle); + return ret; +} + static void make_xmms_dir(void) { gchar *filename; @@ -499,6 +559,22 @@ static void read_config(void) cfg.gentitle_format = g_strdup("%p - %t"); if (cfg.outputplugin == NULL) { + if (alsa_configured()) + { + cfg.outputplugin = g_strdup_printf("%s/%s/libALSA.so", PLUGIN_DIR, + plugin_dir_list[0]); + if (access(cfg.outputplugin, R_OK)) + { + g_free(cfg.outputplugin); + cfg.outputplugin = NULL; + fprintf(stderr, "** ALSA configured, install xmms-out-alsa please\n"); + } + else + fprintf(stderr, "** ALSA configured, auto enabling ALSA output plugin\n"); + } + } + if (cfg.outputplugin == NULL) + { #ifdef HAVE_OSS cfg.outputplugin = g_strdup_printf("%s/%s/libOSS.so", PLUGIN_DIR, plugin_dir_list[0]); #elif defined(sun)