forked from enlightenment/efl
emotion: use eina_prefix to determine player location.
Move players from $bindir to $libdir/emotion/utils and find them with eina_prefix. I was willing to play with this prefix thing, quite nice ;-) SVN revision: 63077
This commit is contained in:
parent
e5b7c25792
commit
3ed350c887
|
@ -10,9 +10,8 @@ AM_CPPFLAGS = \
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
||||||
@VLC_CFLAGS@
|
@VLC_CFLAGS@
|
||||||
|
|
||||||
pkgdir = $(libdir)/emotion/generic_players/$(MODULE_ARCH)
|
internal_bindir = $(libdir)/emotion/utils
|
||||||
|
internal_bin_PROGRAMS = em_generic_vlc
|
||||||
bin_PROGRAMS = em_generic_vlc
|
|
||||||
|
|
||||||
em_generic_vlc_SOURCES = emotion_generic_vlc.c
|
em_generic_vlc_SOURCES = emotion_generic_vlc.c
|
||||||
em_generic_vlc_DEPENDENCIES = $(top_srcdir)/src/modules/generic/Emotion_Generic_Plugin.h
|
em_generic_vlc_DEPENDENCIES = $(top_srcdir)/src/modules/generic/Emotion_Generic_Plugin.h
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include "emotion_private.h"
|
#include "emotion_private.h"
|
||||||
#include "emotion_generic.h"
|
#include "emotion_generic.h"
|
||||||
|
|
||||||
|
static Eina_Prefix *pfx = NULL;
|
||||||
|
|
||||||
struct _default_players {
|
struct _default_players {
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *cmdline;
|
const char *cmdline;
|
||||||
|
@ -29,18 +31,60 @@ static struct _default_players players[] = {
|
||||||
static const char *
|
static const char *
|
||||||
_get_player(const char *name)
|
_get_player(const char *name)
|
||||||
{
|
{
|
||||||
|
const char *selected_name = NULL;
|
||||||
|
const char *libdir = eina_prefix_lib_get(pfx);
|
||||||
|
static char buf[PATH_MAX];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!name)
|
if (name)
|
||||||
return players[0].cmdline;
|
{
|
||||||
|
for (i = 0; players[i].name; i++)
|
||||||
|
{
|
||||||
|
if (!strcmp(players[i].name, name))
|
||||||
|
{
|
||||||
|
selected_name = players[i].cmdline;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!selected_name) && (name))
|
||||||
|
selected_name = name;
|
||||||
|
|
||||||
|
if (selected_name)
|
||||||
|
{
|
||||||
|
const char *cmd;
|
||||||
|
|
||||||
|
if (selected_name[0] == '/') cmd = selected_name;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "%s/emotion/utils/%s",
|
||||||
|
libdir, selected_name);
|
||||||
|
cmd = buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG("Try generic player '%s'", cmd);
|
||||||
|
if (access(cmd, R_OK | X_OK) == 0)
|
||||||
|
{
|
||||||
|
INF("Using generic player '%s'", cmd);
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; players[i].name; i++)
|
for (i = 0; players[i].name; i++)
|
||||||
{
|
{
|
||||||
if (!strcmp(players[i].name, name))
|
snprintf(buf, sizeof(buf), "%s/emotion/utils/%s",
|
||||||
return players[i].cmdline;
|
libdir, players[i].cmdline);
|
||||||
|
DBG("Try generic player '%s'", buf);
|
||||||
|
if (access(buf, R_OK | X_OK) == 0)
|
||||||
|
{
|
||||||
|
INF("Using fallback player '%s'", buf);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return name;
|
ERR("no generic player found, given name='%s'", name ? name : "");
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -500,8 +544,11 @@ static unsigned char
|
||||||
em_init(Evas_Object *obj, void **emotion_video, Emotion_Module_Options *opt)
|
em_init(Evas_Object *obj, void **emotion_video, Emotion_Module_Options *opt)
|
||||||
{
|
{
|
||||||
Emotion_Generic_Video *ev;
|
Emotion_Generic_Video *ev;
|
||||||
|
const char *player;
|
||||||
|
|
||||||
if (!emotion_video) return 0;
|
if (!emotion_video) return 0;
|
||||||
|
player = _get_player(opt ? opt->player : NULL);
|
||||||
|
if (!player) return 0;
|
||||||
|
|
||||||
ev = (Emotion_Generic_Video *)calloc(1, sizeof(*ev));
|
ev = (Emotion_Generic_Video *)calloc(1, sizeof(*ev));
|
||||||
if (!ev) return 0;
|
if (!ev) return 0;
|
||||||
|
@ -511,7 +558,7 @@ em_init(Evas_Object *obj, void **emotion_video, Emotion_Module_Options *opt)
|
||||||
ev->audio_mute = EINA_FALSE;
|
ev->audio_mute = EINA_FALSE;
|
||||||
|
|
||||||
ev->obj = obj;
|
ev->obj = obj;
|
||||||
ev->cmdline = eina_stringshare_add(_get_player(opt->player));
|
ev->cmdline = eina_stringshare_add(player);
|
||||||
*emotion_video = ev;
|
*emotion_video = ev;
|
||||||
|
|
||||||
return _fork_and_exec(obj, ev);
|
return _fork_and_exec(obj, ev);
|
||||||
|
@ -1105,12 +1152,27 @@ static void module_close(Emotion_Video_Module *module, void *video)
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
generic_module_init(void)
|
generic_module_init(void)
|
||||||
{
|
{
|
||||||
|
if (!pfx)
|
||||||
|
{
|
||||||
|
pfx = eina_prefix_new(NULL, emotion_object_add,
|
||||||
|
"EMOTION", "emotion", "AUTHORS",
|
||||||
|
PACKAGE_BIN_DIR,
|
||||||
|
PACKAGE_LIB_DIR,
|
||||||
|
PACKAGE_DATA_DIR,
|
||||||
|
"");
|
||||||
|
if (!pfx) return EINA_FALSE;
|
||||||
|
}
|
||||||
return _emotion_module_register("generic", module_open, module_close);
|
return _emotion_module_register("generic", module_open, module_close);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
generic_module_shutdown(void)
|
generic_module_shutdown(void)
|
||||||
{
|
{
|
||||||
|
if (pfx)
|
||||||
|
{
|
||||||
|
eina_prefix_free(pfx);
|
||||||
|
pfx = NULL;
|
||||||
|
}
|
||||||
_emotion_module_unregister("generic");
|
_emotion_module_unregister("generic");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue