patch fixes both emotion_generic and terminology and E17 boots OK.
The previous version broke terminology.
Impl (on a non-relocated, packaged install):
1. Ignore locale if not given in Check[2], and find postfixes.
2. from dlinfo scan as per comments from left to right for '/lib' or
'/bin' sub-string.
use the left part as prefix.
3. cat the prefix (2) and postfix (1) together for other vars.
---
Don't know who calls eina_prefix_data_get() when launching terminology. But
the following log makes one quite uneasy.
arvind@garp:~$ EINA_LOG_LEVELS=eina_prefix:4 /usr/bin/terminology
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:382 eina_prefix_new() EINA PREFIX:
argv0=/usr/bin/terminology, symbol=0x7f47d6524320,
magicsharefile=config/profile.cfg, envprefix=ELM
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:502 eina_prefix_new()
Can't work out a common prefix - compiled in fallback
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ELM_BIN_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ELM_LIB_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ELM_DATA_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ELM_LOCALE_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:515 eina_prefix_new() Try
dladdr on 0x7f47d6524320
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:522 eina_prefix_new() Dlinfo worke
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:525 eina_prefix_new()
Dlinfo dli_fname = /usr/lib/x86_64-linux-gnu/libelementary.so.1
INF<1134>:eina_prefix lib/eina/eina_prefix.c:532 eina_prefix_new()
Dlsym gave full path = /usr/lib/x86_64-linux-gnu/libelementary.so.1
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:576 eina_prefix_new()
>From exe /usr/lib/x86_64-linux-gnu/libelementary.so.1 figure out the
rest
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:596 eina_prefix_new()
Have prefix = /usr
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:602 eina_prefix_new()
Have bin = /usr/bin
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:607 eina_prefix_new()
Have lib = /usr/lib
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:612 eina_prefix_new()
Have locale = /usr/share
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:616 eina_prefix_new()
Magic = config/profile.cfg
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:620 eina_prefix_new()
Check in /usr/share/elementary/config/profile.cfg
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:625 eina_prefix_new()
Magic path /usr/share/elementary/config/profile.cfg stat passed
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:382 eina_prefix_new() EINA PREFIX:
argv0=(null), symbol=0x7f47d435e2a0, magicsharefile=checkme, envprefix=EVAS
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:488 eina_prefix_new()
Prefix relative bindir = bin
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:489 eina_prefix_new()
Prefix relative libdir = lib/x86_64-linux-gnu
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:490 eina_prefix_new()
Prefix relative datadir = share/evas
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:491 eina_prefix_new()
Prefix relative localedir = share/evas
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var EVAS_BIN_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var EVAS_LIB_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var EVAS_DATA_DIR
DBG<11DBG<1134>:eina_prefix lib/eina/eina_prefix.c:515
eina_prefix_new() Try dladdr on 0x7f47d435e2a0
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:522 eina_prefix_new() Dlinfo worke
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:525 eina_prefix_new()
Dlinfo dli_fname = /usr/lib/x86_64-linux-gnu/libevas.so.1
INF<1134>:eina_prefix lib/eina/eina_prefix.c:532 eina_prefix_new()
Dlsym gave full path = /usr/lib/x86_64-linux-gnu/libevas.so.1
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:576 eina_prefix_new()
>From exe /usr/lib/x86_64-linux-gnu/libevas.so.1 figure out the rest
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:596 eina_prefix_new()
Have prefix = /usr
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:602 eina_prefix_new()
Have bin = /usr/bin
DBG<1134>:einDBG<1134>:eina_prefix lib/eina/eina_prefix.c:620
eina_prefix_new() Check in /usr/share/evas/checkme
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:625 eina_prefix_new()
Magic path /usr/share/evas/checkme stat passed
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:382 eina_prefix_new() EINA PREFIX:
argv0=(null), symbol=0x7f47d3774d90, magicsharefile=checkme, envprefix=ECORE_IM
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:488 eina_prefix_new()
Prefix relative bindir = bin
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:489 eina_prefix_new()
Prefix relative libdir = lib/x86_64-linux-gnu
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:490 eina_prefix_new()
Prefix relative datadir = share/ecore_imf
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:491 eina_prefix_new()
Prefix relative localedir = share/ecore_imf
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ECORE_IMF_BIN_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ECORE_IMF_LIB_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ECORE_IMF_DATA_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var ECORE_IMF_LOCALE_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:515 eina_prefix_new() Try
dladdr on 0x7f47d3774d90
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:522 eina_prefix_new() Dlinfo worke
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:525 eina_prefix_new()
Dlinfo dli_fname = /usr/lib/x86_64-linux-gnu/libecore_imf.so.1
INF<1134>:eina_prefix lib/eina/eina_prefix.c:532 eina_prefix_new()
Dlsym gave full path = /usr/lib/x86_64-linux-gnu/libecore_imf.so.1
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:576 eina_prefix_new()
>From exe /usr/lib/x86_64-linux-gnu/libecore_imf.so.1 figure out the
rest
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:596 eina_prefix_new()
Have prefix = /usr
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:602 eina_prefix_new()
Have bin = /usr/bin
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:607 eina_prefix_new()
Have lib = /usr/lib/x86_64-linux-gnu
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:612 eina_prefix_new()
Have locale = /usr/share/ecore_imf
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:616 eina_prefix_new()
Magic = checkme
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:620 eina_prefix_new()
Check in /usr/share/ecore_imf/checkme
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:625 eina_prefix_new()
Magic path /usr/share/ecore_imf/checkme stat passed
ERR<1134>:elementary elm_prefs.c:2138 _elm_prefs_init() prefs iface
module could not be loaded, the prefs widget won't function
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:382 eina_prefix_new() EINA PREFIX:
argv0=/usr/bin/terminology, symbol=0x40cb00, magicsharefile=themes/default.edj,
envprefix=TERMINOLOGY
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:488 eina_prefix_new()
Prefix relative bindir = bin
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:489 eina_prefix_new()
Prefix relative libdir = local/lib
DBG<1134>DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305
_get_env_var() Try env var TERMINOLOGY_LIB_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var TERMINOLOGY_DATA_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var TERMINOLOGY_LOCALE_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:515 eina_prefix_new() Try
dladdr on 0x40cb00
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:522 eina_prefix_new() Dlinfo worke
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:525 eina_prefix_new()
Dlinfo dli_fname = /usr/bin/terminology
INF<1134>:eina_prefix lib/eina/eina_prefix.c:532 eina_prefix_new()
Dlsym gave full path = /usr/bin/terminology
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:576 eina_prefix_new()
>From exe /usr/bin/terminology figure out the rest
DBG<1134>:eina_preDBG<1134>:eina_prefix lib/eina/eina_prefix.c:305
_get_env_var() Try env var TERMINOLOGY_LIB_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var TERMINOLOGY_DATA_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:305 _get_env_var() Try
env var TERMINOLOGY_LOCALE_DIR
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:515 eina_prefix_new() Try
dladdr on 0x40cb00
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:522 eina_prefix_new() Dlinfo worke
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:525 eina_prefix_new()
Dlinfo dli_fname = /usr/bin/terminology
INF<1134>:eina_prefix lib/eina/eina_prefix.c:532 eina_prefix_new()
Dlsym gave full path = /usr/bin/terminology
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:576 eina_prefix_new()
>From exe /usr/bin/terminology figure out the rest
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:596 eina_prefix_new()
Have prefix = /usr
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:602 eina_prefix_new()
Have bin = /usr/bin
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:607 eina_prefix_new()
Have lib = /usr/local/lib
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:612 eina_prefix_new()
Have locale = /usr/share/terminology
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:616 eina_prefix_new()
Magic = themes/default.edj
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:620 eina_prefix_new()
Check in /usr/share/terminology/themes/default.edj
DBG<1134>:eina_prefix lib/eina/eina_prefix.c:625 eina_prefix_new()
Magic path /usr/share/terminology/themes/default.edj stat passed
--- a/src/lib/eina/eina_prefix.c 2013-01-03 20:40:34.000000000 +0530
+++ b/src/lib/eina/eina_prefix.c 2013-01-13 16:45:47.000000000 +0530
@@ -89,6 +89,7 @@ struct _Eina_Prefix
unsigned char fallback : 1;
unsigned char no_common_prefix : 1;
unsigned char env_used : 1;
+ unsigned char ignore_locale : 1;
};
#define STRDUP_REP(x, y) do { if (x) free(x); x = strdup(y); } while (0)
@@ -382,6 +383,8 @@ eina_prefix_new(const char *argv0, void
pfx = calloc(1, sizeof(Eina_Prefix));
if (!pfx) return NULL;
+ if (!strlen(pkg_locale))
+ pfx->ignore_locale = 1;
/* if provided with a share dir use datadir/sharedir as the share dir */
if (sharedir)
{
@@ -469,15 +472,19 @@ eina_prefix_new(const char *argv0, void
}
}
/* 2. if all the common string offsets match we compiled with a
common prefix */
+ /* packaging scripts may not set localedir if package uses no
locale info (e.g. debian) */
if (((pkg_bin_p - pkg_bin) == (pkg_lib_p - pkg_lib))
&& ((pkg_bin_p - pkg_bin) == (pkg_data_p - pkg_data))
- && ((pkg_bin_p - pkg_bin) == (pkg_locale_p - pkg_locale))
+ && (pfx->ignore_locale || ((pkg_bin_p - pkg_bin) ==
(pkg_locale_p - pkg_locale)))
)
{
bindir = pkg_bin_p;
libdir = pkg_lib_p;
datadir = pkg_data_p;
- localedir = pkg_locale_p;
+ if (!pfx->ignore_locale)
+ localedir = pkg_locale_p;
+ else
+ localedir = datadir;
DBG("Prefix relative bindir = %s", bindir);
DBG("Prefix relative libdir = %s", libdir);
DBG("Prefix relative datadir = %s", datadir);
@@ -567,7 +574,11 @@ eina_prefix_new(const char *argv0, void
* exe = /blah/whatever/lib/arch/libexe.so
*/
DBG("From exe %s figure out the rest", pfx->exe_path);
- p = strrchr(pfx->exe_path, DSEP_C);
+ p = strstr(pfx->exe_path, "/lib");
+ if (!p)
+ p = strstr(pfx->exe_path, "/bin");
+ if (p)
+ p += 4; /* lucky strlen("/lib" || "/bin") is 4! */
if (p)
{
p--;
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_123012
_______________________________________________
enlightenment-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-users