eolian: new API: eolian_system_directory_scan, use it
authorDaniel Kolesa <d.kolesa@samsung.com>
Mon, 7 Jul 2014 15:46:12 +0000 (16:46 +0100)
committerDaniel Kolesa <d.kolesa@samsung.com>
Mon, 7 Jul 2014 15:48:54 +0000 (16:48 +0100)
src/Makefile_Eolian.am
src/bin/eolian/main.c
src/bin/eolian_cxx/eolian_cxx.cc
src/lib/eolian/Eolian.h
src/lib/eolian/eolian.c
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h

index 459a105..cfdce0e 100644 (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@
index 9b93d7e..e88e8a3 100644 (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;
index 40b226b..e10a849 100644 (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)
index cf80513..5f61336 100644 (file)
@@ -168,11 +168,25 @@ 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..
  *
index 7a958e4..4d10dcd 100644 (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;
index 5e34acf..55fd397 100644 (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)
 {
index 7965f46..f89fb45 100644 (file)
@@ -4,6 +4,7 @@
 #include <Eolian.h>
 
 extern int _eolian_log_dom;
+extern Eina_Prefix *_eolian_prefix;
 
 #ifdef CRI
 #undef CRI