From 5168297fdb823328f9f2f5431ea03f2d7d083566 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Mon, 7 Jul 2014 16:46:12 +0100 Subject: [PATCH] eolian: new API: eolian_system_directory_scan, use it --- src/Makefile_Eolian.am | 4 +++- src/bin/eolian/main.c | 3 +++ src/bin/eolian_cxx/eolian_cxx.cc | 4 ++++ src/lib/eolian/Eolian.h | 14 ++++++++++++++ src/lib/eolian/eolian.c | 12 ++++++++++++ src/lib/eolian/eolian_database.c | 12 ++++++++++++ src/lib/eolian/eolian_database.h | 1 + 7 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am index 459a1053e0..cfdce0e62c 100644 --- a/src/Makefile_Eolian.am +++ b/src/Makefile_Eolian.am @@ -17,7 +17,9 @@ lib_eolian_libeolian_la_SOURCES = \ lib/eolian/eolian_database.c \ lib/eolian/eolian_database.h -lib_eolian_libeolian_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @EOLIAN_CFLAGS@ +lib_eolian_libeolian_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @EOLIAN_CFLAGS@ \ + -DPACKAGE_DATA_DIR=\"$(datadir)/eolian\" + lib_eolian_libeolian_la_LIBADD = @EOLIAN_LIBS@ lib_eolian_libeolian_la_DEPENDENCIES = @EOLIAN_INTERNAL_LIBS@ lib_eolian_libeolian_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@ diff --git a/src/bin/eolian/main.c b/src/bin/eolian/main.c index 9b93d7eab6..e88e8a37c4 100644 --- a/src/bin/eolian/main.c +++ b/src/bin/eolian/main.c @@ -321,6 +321,9 @@ int main(int argc, char **argv) goto end; } + if (!getenv("EFL_RUN_IN_TREE")) + eolian_system_directory_scan(); + eolian_all_eot_files_parse(); const char *filename; diff --git a/src/bin/eolian_cxx/eolian_cxx.cc b/src/bin/eolian_cxx/eolian_cxx.cc index 40b226be94..e10a849c1b 100644 --- a/src/bin/eolian_cxx/eolian_cxx.cc +++ b/src/bin/eolian_cxx/eolian_cxx.cc @@ -198,6 +198,10 @@ database_load(options_type const& opts) << "Couldn't load eolian from '" << src << "'."; } } + if (!getenv("EFL_RUN_IN_TREE")) + { + eolian_system_directory_scan(); + } if (!::eolian_all_eot_files_parse()) { EINA_CXX_DOM_LOG_ERR(eolian_cxx::domain) diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index cf8051388b..5f61336a3e 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -168,10 +168,24 @@ EAPI int eolian_shutdown(void); * @param[in] dir the directory to scan * @return EINA_TRUE on success, EINA_FALSE otherwise. * + * @see eolian_system_directory_scan + * * @ingroup Eolian */ EAPI Eina_Bool eolian_directory_scan(const char *dir); +/* + * @brief Scan the system directory (recursively) and search for .eo and + * .eot files. + * + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * @see eolian_directory_scan + * + * @ingroup Eolian + */ +EAPI Eina_Bool eolian_system_directory_scan(); + /* * @brief Force parsing of all the .eo files located in the directories * given in eolian_directory_scan.. diff --git a/src/lib/eolian/eolian.c b/src/lib/eolian/eolian.c index 7a958e4c38..4d10dcdf8a 100644 --- a/src/lib/eolian/eolian.c +++ b/src/lib/eolian/eolian.c @@ -3,6 +3,7 @@ static int _eolian_init_counter = 0; int _eolian_log_dom = -1; +Eina_Prefix *_eolian_prefix = NULL; EAPI int eolian_init(void) { @@ -22,6 +23,15 @@ EAPI int eolian_init(void) EINA_LOG_STATE_INIT); INF("Init"); + + _eolian_prefix = eina_prefix_new(NULL, eolian_init, "EOLIAN", "eolian", + NULL, "", "", PACKAGE_DATA_DIR, ""); + if (!_eolian_prefix) + { + ERR("Could not initialize the Eolian prefix."); + return EINA_FALSE; + } + database_init(); eo_lexer_init(); return ++_eolian_init_counter; @@ -45,6 +55,8 @@ EAPI int eolian_shutdown(void) eo_lexer_shutdown(); database_shutdown(); + eina_prefix_free(_eolian_prefix); + _eolian_prefix = NULL; eina_log_domain_unregister(_eolian_log_dom); _eolian_log_dom = -1; diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index 5e34acf197..55fd3976a3 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -1582,6 +1582,18 @@ eolian_directory_scan(const char *dir) return EINA_TRUE; } +EAPI Eina_Bool +eolian_system_directory_scan() +{ + Eina_Bool ret; + Eina_Strbuf *buf = eina_strbuf_new(); + eina_strbuf_append(buf, eina_prefix_data_get(_eolian_prefix)); + eina_strbuf_append(buf, "/include"); + ret = eolian_directory_scan(eina_strbuf_string_get(buf)); + eina_strbuf_free(buf); + return ret; +} + static char * _eolian_class_to_filename(const char *filename) { diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 7965f46f39..f89fb45831 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -4,6 +4,7 @@ #include extern int _eolian_log_dom; +extern Eina_Prefix *_eolian_prefix; #ifdef CRI #undef CRI