eina - does modules like the rest of efl, so it's able to be installed with
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jan 2010 15:54:28 +0000 (15:54 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jan 2010 15:54:28 +0000 (15:54 +0000)
multiple versions at the same time. eventually will neeed to also include
major number in release name too.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@45594 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

configure.ac
src/include/eina_module.h
src/lib/eina_mempool.c
src/lib/eina_module.c
src/modules/mp/buddy/Makefile.am
src/modules/mp/chained_pool/Makefile.am
src/modules/mp/ememoa_fixed/Makefile.am
src/modules/mp/ememoa_unknown/Makefile.am
src/modules/mp/fixed_bitmap/Makefile.am
src/modules/mp/pass_through/Makefile.am

index db96b45..5209834 100644 (file)
@@ -28,6 +28,9 @@ AC_DEFINE_UNQUOTED(VMAJ, ["$VMAJ"], [Eina major version number])
 AC_SUBST(VMAJ)
 AC_SUBST(version_info)
 
+MODULE_ARCH="$host_os-$host_cpu-$release"
+AC_SUBST(MODULE_ARCH)
+AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
 
 ### Needed information
 
index 311b89c..89f97fa 100644 (file)
@@ -66,6 +66,7 @@ EAPI const char * eina_module_file_get(const Eina_Module *m) EINA_PURE EINA_WARN
 EAPI char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
 EAPI char *eina_module_environment_path_get(const char *env, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
 
+EAPI Eina_Array * eina_module_arch_list_get(Eina_Array *array, const char *path, const char *arch);
 EAPI Eina_Array * eina_module_list_get(Eina_Array *array, const char *path, unsigned int recursive, Eina_Module_Cb cb, void *data) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
 EAPI void eina_module_list_load(Eina_Array *list) EINA_ARG_NONNULL(1);
 EAPI void eina_module_list_unload(Eina_Array *list) EINA_ARG_NONNULL(1);
index 253b291..b4e3b38 100644 (file)
@@ -165,18 +165,18 @@ eina_mempool_init(void)
    _backends = eina_hash_string_superfast_new(NULL);
 
    /* dynamic backends */
-   _modules = eina_module_list_get(NULL, PACKAGE_LIB_DIR "/eina-"VMAJ"/mp/", 0, NULL, NULL);
+   _modules = eina_module_arch_list_get(NULL, PACKAGE_LIB_DIR "/eina/modules/mp", MODULE_ARCH);
 
-   path = eina_module_environment_path_get("HOME", "/.eina-"VMAJ"/mp/");
-   _modules = eina_module_list_get(_modules, path, 0, NULL, NULL);
+   path = eina_module_environment_path_get("HOME", "/.eina/mp/modules/mp");
+   _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH);
    if (path) free(path);
 
-   path = eina_module_environment_path_get("EINA_MODULES_MEMPOOL_DIR", "/eina-"VMAJ"/mp/");
-   _modules = eina_module_list_get(_modules, path, 0, NULL, NULL);
+   path = eina_module_environment_path_get("EINA_MODULES_MEMPOOL_DIR", "/eina/modules/mp");
+   _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH);
    if (path) free(path);
 
-   path = eina_module_symbol_path_get(eina_init, "/eina-"VMAJ"/mp/");
-   _modules = eina_module_list_get(_modules, path, 0, NULL, NULL);
+   path = eina_module_symbol_path_get(eina_init, "/eina/modules/mp");
+   _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH);
    if (path) free(path);
 
    if (!_modules)
@@ -186,6 +186,7 @@ eina_mempool_init(void)
        goto mempool_init_error;
      }
    eina_module_list_load(_modules);
+   
    /* builtin backends */
 #ifdef EINA_STATIC_BUILD_CHAINED_POOL
    chained_init();
index 5d2e007..3a766ae 100644 (file)
@@ -511,6 +511,51 @@ EAPI char *eina_module_environment_path_get(const char *env, const char *sub_dir
    return NULL;
 }
 
+static void _dir_arch_list_db(const char *name, const char *path, void *data)
+{
+   Dir_List_Get_Cb_Data *cb_data = data;
+   Eina_Module *m;
+   char *file;
+   size_t length;
+   
+   length = strlen(path) + 1 + strlen(name) + 1 + 
+     strlen((char *)(cb_data->data)) + 1 + sizeof("module") +
+     sizeof(SHARED_LIB_SUFFIX) + 1;
+   
+   file = alloca(length);
+   snprintf(file, length, "%s/%s/%s/module" SHARED_LIB_SUFFIX, 
+            path, name, (char *)(cb_data->data));
+   m = eina_module_new(file);
+   if (!m)
+     return;
+   eina_array_push(cb_data->array, m);
+}
+
+/**
+ * Get a list of modules found on the directory path
+ *
+ * @param array The array that stores the list of the modules.
+ * @param path The directory's path to search for modules
+ * @param arch the architecture string
+ * @param cb Callback function to call, if the return value of the callback is zero
+ * it won't be added to the list, if it is one, it will.
+ * @param data Data passed to the callback function
+ */
+EAPI Eina_Array * eina_module_arch_list_get(Eina_Array *array, const char *path, const char *arch)
+{
+   Dir_List_Get_Cb_Data list_get_cb_data;
+
+   if ((!path) || (!arch)) return array;
+
+   list_get_cb_data.array = array ? array : eina_array_new(4);
+   list_get_cb_data.cb = NULL;
+   list_get_cb_data.data = (void *)arch;
+
+   eina_file_dir_list(path, 0, &_dir_arch_list_db, &list_get_cb_data);
+
+   return list_get_cb_data.array;
+}
+
 /**
  * Get a list of modules found on the directory path
  *
index 2006d62..7673e8c 100644 (file)
@@ -10,16 +10,16 @@ AM_CPPFLAGS = \
 if EINA_BUILD_BUDDY
 if !EINA_STATIC_BUILD_BUDDY
 
-controllerdir = $(libdir)/eina/mp
-controller_LTLIBRARIES = eina_buddy.la
+controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH)
+controller_LTLIBRARIES = module.la
 
-eina_buddy_la_SOURCES = \
+module_la_SOURCES = \
 eina_buddy.c
 
-eina_buddy_la_CFLAGS = @EINA_CFLAGS@
-eina_buddy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
-eina_buddy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
-eina_buddy_la_LIBTOOLFLAGS = --tag=disable-static
+module_la_CFLAGS = @EINA_CFLAGS@
+module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
+module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
+module_la_LIBTOOLFLAGS = --tag=disable-static
 
 endif
 endif
index 5983ac5..3f99a48 100644 (file)
@@ -10,16 +10,16 @@ AM_CPPFLAGS = \
 if EINA_BUILD_CHAINED_POOL
 if !EINA_STATIC_BUILD_CHAINED_POOL
 
-controllerdir = $(libdir)/eina-$(VMAJ)/mp
-controller_LTLIBRARIES = eina_chained_mempool.la
+controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH)
+controller_LTLIBRARIES = module.la
 
-eina_chained_mempool_la_SOURCES = \
+module_la_SOURCES = \
 eina_chained_mempool.c
 
-eina_chained_mempool_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
-eina_chained_mempool_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
-eina_chained_mempool_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
-eina_chained_mempool_la_LIBTOOLFLAGS = --tag=disable-static
+module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
+module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
+module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
+module_la_LIBTOOLFLAGS = --tag=disable-static
 
 endif
 endif
index da03871..3bd3371 100644 (file)
@@ -12,15 +12,15 @@ AM_CPPFLAGS = \
 if EINA_BUILD_EMEMOA_FIXED
 if !EINA_STATIC_BUILD_EMEMOA_FIXED
 
-controllerdir = $(libdir)/eina-$(VMAJ)/mp
-controller_LTLIBRARIES = eina_ememoa_fixed.la
+controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH)
+controller_LTLIBRARIES = module.la
 
-eina_ememoa_fixed_la_SOURCES = \
+module_la_SOURCES = \
 eina_ememoa_fixed.c
 
-eina_ememoa_fixed_la_LIBADD       = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ @EMEMOA_LIBS@
-eina_ememoa_fixed_la_LDFLAGS      = -no-undefined @lt_enable_auto_import@ -module -avoid-version
-eina_ememoa_fixed_la_LIBTOOLFLAGS = --tag=disable-static
+module_la_LIBADD       = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ @EMEMOA_LIBS@
+module_la_LDFLAGS      = -no-undefined @lt_enable_auto_import@ -module -avoid-version
+module_la_LIBTOOLFLAGS = --tag=disable-static
 
 endif
 endif
index 3aff35f..c55e6e7 100644 (file)
@@ -12,15 +12,15 @@ AM_CPPFLAGS = \
 if EINA_BUILD_EMEMOA_UNKNOWN
 if !EINA_STATIC_BUILD_EMEMOA_UNKNOWN
 
-controllerdir = $(libdir)/eina-$(VMAJ)/mp
-controller_LTLIBRARIES = eina_ememoa_unknown.la
+controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH)
+controller_LTLIBRARIES = module.la
 
-eina_ememoa_unknown_la_SOURCES = \
+module_la_SOURCES = \
 eina_ememoa_unknown.c
 
-eina_ememoa_unknown_la_LIBADD       = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
-eina_ememoa_unknown_la_LDFLAGS      = -no-undefined @lt_enable_auto_import@ -module -avoid-version
-eina_ememoa_unknown_la_LIBTOOLFLAGS = --tag=disable-static
+module_la_LIBADD       = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
+module_la_LDFLAGS      = -no-undefined @lt_enable_auto_import@ -module -avoid-version
+module_la_LIBTOOLFLAGS = --tag=disable-static
 
 endif
 endif
index aad8dfc..cea2f08 100644 (file)
@@ -11,15 +11,15 @@ AM_CPPFLAGS = \
 if EINA_BUILD_FIXED_BITMAP
 if !EINA_STATIC_BUILD_FIXED_BITMAP
 
-controllerdir = $(libdir)/eina-$(VMAJ)/mp
-controller_LTLIBRARIES = eina_fixed_bitmap.la
+controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH)
+controller_LTLIBRARIES = module.la
 
-eina_fixed_bitmap_la_SOURCES = \
+module_la_SOURCES = \
 eina_fixed_bitmap.c
 
-eina_fixed_bitmap_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
-eina_fixed_bitmap_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
-eina_fixed_bitmap_la_LIBTOOLFLAGS = --tag=disable-static
+module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
+module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
+module_la_LIBTOOLFLAGS = --tag=disable-static
 
 endif
 endif
index 3bf94ab..69a0484 100644 (file)
@@ -11,15 +11,15 @@ AM_CPPFLAGS = \
 if EINA_BUILD_PASS_THROUGH
 if !EINA_STATIC_BUILD_PASS_THROUGH
 
-controllerdir = $(libdir)/eina-$(VMAJ)/mp
-controller_LTLIBRARIES = eina_pass_through.la
+controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH)
+controller_LTLIBRARIES = module.la
 
-eina_pass_through_la_SOURCES = \
+module_la_SOURCES = \
 eina_pass_through.c
 
-eina_pass_through_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
-eina_pass_through_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
-eina_pass_through_la_LIBTOOLFLAGS = --tag=disable-static
+module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
+module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
+module_la_LIBTOOLFLAGS = --tag=disable-static
 
 endif
 endif