forked from enlightenment/efl
efl/eina: fix debian multilib detection without magic file.
The algorithm will now consider valid bin, data orlocale as well if magic file was not provided. SVN revision: 82429
This commit is contained in:
parent
f57968f158
commit
65aae8f181
|
@ -1,8 +1,12 @@
|
||||||
2013-01-08 Mike Blumenkrantz
|
2013-01-08 Gustavo Sverzut Barbieri (k-s)
|
||||||
|
|
||||||
|
* Fix eina_prefix_new() with debian multilib without magic check file.
|
||||||
|
|
||||||
|
2013-01-08 Mike Blumenkrantz
|
||||||
|
|
||||||
* Fix efreet desktop command parsing of https
|
* Fix efreet desktop command parsing of https
|
||||||
|
|
||||||
2013-01-07 Sung W. Park (sung_)
|
2013-01-07 Sung W. Park (sung_)
|
||||||
|
|
||||||
* Pulled out evas gl backend binary shader file caching code from
|
* Pulled out evas gl backend binary shader file caching code from
|
||||||
evas_gl_shader.c file and made an internal generic caching api in
|
evas_gl_shader.c file and made an internal generic caching api in
|
||||||
|
|
1
NEWS
1
NEWS
|
@ -104,3 +104,4 @@ Fixes:
|
||||||
* Fix ecore_con case where freeing server double-frees clients
|
* Fix ecore_con case where freeing server double-frees clients
|
||||||
* Fix build of Evas XCB backend
|
* Fix build of Evas XCB backend
|
||||||
* Fix efreet desktop command parsing of https
|
* Fix efreet desktop command parsing of https
|
||||||
|
* Fix eina_prefix_new() with debian multilib without magic check file.
|
||||||
|
|
|
@ -376,6 +376,7 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
|
||||||
const char *libdir = "lib";
|
const char *libdir = "lib";
|
||||||
const char *datadir = "share";
|
const char *datadir = "share";
|
||||||
const char *localedir = "share";
|
const char *localedir = "share";
|
||||||
|
Eina_Bool from_lib = EINA_FALSE, from_bin = EINA_FALSE;
|
||||||
|
|
||||||
DBG("EINA PREFIX: argv0=%s, symbol=%p, magicsharefile=%s, envprefix=%s",
|
DBG("EINA PREFIX: argv0=%s, symbol=%p, magicsharefile=%s, envprefix=%s",
|
||||||
argv0, symbol, magicsharefile, envprefix);
|
argv0, symbol, magicsharefile, envprefix);
|
||||||
|
@ -524,6 +525,7 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
|
||||||
{
|
{
|
||||||
INF("Dlsym gave full path = %s", info_dl.dli_fname);
|
INF("Dlsym gave full path = %s", info_dl.dli_fname);
|
||||||
STRDUP_REP(pfx->exe_path, info_dl.dli_fname);
|
STRDUP_REP(pfx->exe_path, info_dl.dli_fname);
|
||||||
|
from_lib = EINA_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -542,6 +544,7 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
|
||||||
envprefix);
|
envprefix);
|
||||||
return pfx;
|
return pfx;
|
||||||
}
|
}
|
||||||
|
from_bin = EINA_TRUE;
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -579,6 +582,9 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
|
||||||
pfx->prefix_path = malloc(p - pfx->exe_path + 1);
|
pfx->prefix_path = malloc(p - pfx->exe_path + 1);
|
||||||
if (pfx->prefix_path)
|
if (pfx->prefix_path)
|
||||||
{
|
{
|
||||||
|
Eina_Bool magic_found = EINA_FALSE;
|
||||||
|
int checks_passed = 0;
|
||||||
|
|
||||||
strncpy(pfx->prefix_path, pfx->exe_path,
|
strncpy(pfx->prefix_path, pfx->exe_path,
|
||||||
p - pfx->exe_path);
|
p - pfx->exe_path);
|
||||||
pfx->prefix_path[p - pfx->exe_path] = 0;
|
pfx->prefix_path[p - pfx->exe_path] = 0;
|
||||||
|
@ -589,55 +595,70 @@ eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
|
||||||
pfx->prefix_path, bindir);
|
pfx->prefix_path, bindir);
|
||||||
STRDUP_REP(pfx->prefix_path_bin, buf);
|
STRDUP_REP(pfx->prefix_path_bin, buf);
|
||||||
DBG("Have bin = %s", pfx->prefix_path_bin);
|
DBG("Have bin = %s", pfx->prefix_path_bin);
|
||||||
|
if ((!from_bin) && (stat(buf, &st) == 0))
|
||||||
|
checks_passed++;
|
||||||
|
|
||||||
/* lib */
|
/* lib */
|
||||||
snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
|
snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
|
||||||
pfx->prefix_path, libdir);
|
pfx->prefix_path, libdir);
|
||||||
STRDUP_REP(pfx->prefix_path_lib, buf);
|
STRDUP_REP(pfx->prefix_path_lib, buf);
|
||||||
DBG("Have lib = %s", pfx->prefix_path_lib);
|
DBG("Have lib = %s", pfx->prefix_path_lib);
|
||||||
|
if ((!from_lib) && (stat(buf, &st) == 0))
|
||||||
|
checks_passed++;
|
||||||
|
|
||||||
/* locale */
|
/* locale */
|
||||||
snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
|
snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
|
||||||
pfx->prefix_path, localedir);
|
pfx->prefix_path, localedir);
|
||||||
STRDUP_REP(pfx->prefix_path_locale, buf);
|
STRDUP_REP(pfx->prefix_path_locale, buf);
|
||||||
DBG("Have locale = %s", pfx->prefix_path_locale);
|
DBG("Have locale = %s", pfx->prefix_path_locale);
|
||||||
|
if (stat(buf, &st) == 0)
|
||||||
|
checks_passed++;
|
||||||
|
|
||||||
/* check if magic file is there - then our guess is right */
|
/* check if magic file is there - then our guess is right */
|
||||||
if (magic)
|
if (!magic)
|
||||||
|
DBG("No magic file");
|
||||||
|
else
|
||||||
{
|
{
|
||||||
DBG("Magic = %s", magic);
|
DBG("Magic = %s", magic);
|
||||||
snprintf(buf, sizeof(buf),
|
snprintf(buf, sizeof(buf),
|
||||||
"%s" DSEP_S "%s" DSEP_S "%s",
|
"%s" DSEP_S "%s" DSEP_S "%s",
|
||||||
pfx->prefix_path, datadir, magic);
|
pfx->prefix_path, datadir, magic);
|
||||||
DBG("Check in %s", buf);
|
DBG("Check in %s", buf);
|
||||||
}
|
|
||||||
if ((!magic) || (stat(buf, &st) == 0))
|
if (stat(buf, &st) == 0)
|
||||||
{
|
{
|
||||||
if (buf[0])
|
checks_passed++;
|
||||||
DBG("Magic path %s stat passed", buf);
|
magic_found = EINA_TRUE;
|
||||||
|
DBG("Magic path %s stat passed", buf);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
DBG("No magic file");
|
WRN("Missing magic path %s", buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (((!magic) && (checks_passed > 0)) ||
|
||||||
|
((magic) && (magic_found)))
|
||||||
|
{
|
||||||
snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
|
snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
|
||||||
pfx->prefix_path, datadir);
|
pfx->prefix_path, datadir);
|
||||||
STRDUP_REP(pfx->prefix_path_data, buf);
|
STRDUP_REP(pfx->prefix_path_data, buf);
|
||||||
}
|
}
|
||||||
/* magic file not there. time to start hunting! */
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (buf[0])
|
for (;p > pfx->exe_path; p--)
|
||||||
{
|
{
|
||||||
for (;p > pfx->exe_path; p--)
|
if (*p == DSEP_C)
|
||||||
{
|
{
|
||||||
if (*p == DSEP_C)
|
p--;
|
||||||
{
|
break;
|
||||||
p--;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (p > pfx->exe_path)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
DBG("Go back one directory");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
WRN("Magic failed");
|
if (p > pfx->exe_path)
|
||||||
|
{
|
||||||
|
int newlen = p - pfx->exe_path;
|
||||||
|
DBG("Go back one directory (%.*s)", newlen, pfx->exe_path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
WRN("No Prefix path (exhausted search depth)");
|
||||||
_fallback(pfx, pkg_bin, pkg_lib, pkg_data,
|
_fallback(pfx, pkg_bin, pkg_lib, pkg_data,
|
||||||
pkg_locale, envprefix);
|
pkg_locale, envprefix);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue