eolian: new API: eolian_system_directory_scan, use it

This commit is contained in:
Daniel Kolesa 2014-07-07 16:46:12 +01:00
parent e42f319d00
commit 5168297fdb
7 changed files with 49 additions and 1 deletions

View File

@ -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@

View File

@ -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;

View File

@ -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)

View File

@ -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..

View File

@ -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;

View File

@ -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)
{

View File

@ -4,6 +4,7 @@
#include <Eolian.h>
extern int _eolian_log_dom;
extern Eina_Prefix *_eolian_prefix;
#ifdef CRI
#undef CRI