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