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
enlightenment-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-users

Reply via email to