summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Eulogium.h111
-rw-r--r--src/lib/Makefile.am18
-rw-r--r--src/lib/eulogium.c64
-rw-r--r--src/lib/eulogium_private.h27
4 files changed, 220 insertions, 0 deletions
diff --git a/src/lib/Eulogium.h b/src/lib/Eulogium.h
new file mode 100644
index 0000000..7ef7c0d
--- /dev/null
+++ b/src/lib/Eulogium.h
@@ -0,0 +1,111 @@
+#ifndef EULOGIUM_H_
+# define EULOGIUM_H_
+
+#include <Elementary.h>
+
+#ifdef EAPI
+# undef EAPI
+#endif
+
+#ifdef _WIN32
+# ifdef EFL_EULOGIUM_BUILD
+# ifdef DLL_EXPORT
+# define EAPI __declspec(dllexport)
+# else
+# define EAPI
+# endif /* ! DLL_EXPORT */
+# else
+# define EAPI __declspec(dllimport)
+# endif /* ! EFL_EULOGIUM_BUILD */
+#else
+# ifdef __GNUC__
+# if __GNUC__ >= 4
+# define EAPI __attribute__ ((visibility("default")))
+# else
+# define EAPI
+# endif
+# else
+# define EAPI
+# endif
+#endif /* ! _WIN32 */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file
+ * @brief These routines are used for Eulogium library interaction.
+ */
+
+/**
+ * @brief Init / shutdown functions.
+ * @defgroup Init Init / Shutdown
+ *
+ * @{
+ *
+ * Functions of obligatory usage, handling proper initialization
+ * and shutdown routines.
+ *
+ * Before the usage of any other function, Eulogium should be properly
+ * initialized with @ref eulogium_init() and the last call to Eulogium's
+ * functions should be @ref eulogium_shutdown(), so everything will
+ * be correctly freed.
+ *
+ * Eulogium logs everything with Eina Log, using the "eulogium" log domain.
+ *
+ */
+
+/**
+ * Initialize Eulogium.
+ *
+ * Initializes Eulogium, its dependencies and modules. Should be the first
+ * function of Eulogium to be called.
+ *
+ * @return The init counter value.
+ *
+ * @see eulogium_shutdown().
+ *
+ * @ingroup Init
+ */
+EAPI int eulogium_init(void);
+
+/**
+ * Shutdown Eulogium
+ *
+ * Shutdown Eulogium. If init count reaches 0, all the internal structures will
+ * be freed. Any Eulogium library call after this point will leads to an error.
+ *
+ * @return Eulogium's init counter value.
+ *
+ * @see eulogium_init().
+ *
+ * @ingroup Init
+ */
+EAPI int eulogium_shutdown(void);
+
+/**
+ * @}
+ */
+
+/**
+ * @brief Main group API that wont do anything
+ * @defgroup Main Main
+ *
+ * @{
+ *
+ * @brief A function that doesn't do any good nor any bad
+ *
+ * @ingroup Main
+ */
+EAPI void eulogium_library_call(void);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EULOGIUM_H_ */
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
new file mode 100644
index 0000000..56d5c22
--- /dev/null
+++ b/src/lib/Makefile.am
@@ -0,0 +1,18 @@
+MAINTAINERCLEANFILES = Makefile.in
+
+AM_CPPFLAGS = \
+-I$(top_srcdir)/src/lib \
+-I$(top_builddir)/src/lib \
+-DPACKAGE_LIB_DIR=\"$(libdir)\" \
+-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
+@EFL_CFLAGS@ \
+-DEFL_EFL_BUILD
+
+lib_LTLIBRARIES = libeulogium.la
+
+includes_HEADERS = Eulogium.h
+includesdir = $(includedir)/eulogium-@VMAJ@
+
+libeulogium_la_SOURCES = eulogium.c
+libeulogium_la_LIBADD = @EFL_LIBS@ -lm
+libeulogium_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
diff --git a/src/lib/eulogium.c b/src/lib/eulogium.c
new file mode 100644
index 0000000..8e19356
--- /dev/null
+++ b/src/lib/eulogium.c
@@ -0,0 +1,64 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "Eulogium.h"
+
+#include "eulogium_private.h"
+
+static int _eulogium_init = 0;
+int _eulogium_lib_log_dom = -1;
+
+EAPI int
+eulogium_init(void)
+{
+ _eulogium_init++;
+ if (_eulogium_init > 1) return _eulogium_init;
+
+ eina_init();
+
+ _eulogium_lib_log_dom = eina_log_domain_register("eulogium", EINA_COLOR_CYAN);
+ if (_eulogium_lib_log_dom < 0)
+ {
+ EINA_LOG_ERR("Eulogium can not create its log domain.");
+ goto shutdown_eina;
+ }
+
+ // Put here your initialization logic of your library
+
+ eina_log_timing(_eulogium_lib_log_dom, EINA_LOG_STATE_STOP, EINA_LOG_STATE_INIT);
+
+ return _eulogium_init;
+
+ shutdown_eina:
+ eina_shutdown();
+ _eulogium_init--;
+
+ return _eulogium_init;
+}
+
+EAPI int
+eulogium_shutdown(void)
+{
+ _eulogium_init--;
+ if (_eulogium_init != 0) return _eulogium_init;
+
+ eina_log_timing(_eulogium_lib_log_dom,
+ EINA_LOG_STATE_START,
+ EINA_LOG_STATE_SHUTDOWN);
+
+ // Put here your shutdown logic
+
+ eina_log_domain_unregister(_eulogium_lib_log_dom);
+ _eulogium_lib_log_dom = -1;
+
+ eina_shutdown();
+
+ return _eulogium_init;
+}
+
+EAPI void
+eulogium_library_call(void)
+{
+ INF("Not really doing anything useful.");
+}
diff --git a/src/lib/eulogium_private.h b/src/lib/eulogium_private.h
new file mode 100644
index 0000000..ff03439
--- /dev/null
+++ b/src/lib/eulogium_private.h
@@ -0,0 +1,27 @@
+#ifndef EULOGIUM_PRIVATE_H
+# define EULOGIUM_PRIVATE_H
+
+extern int _eulogium_lib_log_dom;
+
+#ifdef ERR
+# undef ERR
+#endif
+#define ERR(...) EINA_LOG_DOM_ERR(_eulogium_lib_log_dom, __VA_ARGS__)
+#ifdef INF
+# undef INF
+#endif
+#define INF(...) EINA_LOG_DOM_INFO(_eulogium_lib_log_dom, __VA_ARGS__)
+#ifdef WRN
+# undef WRN
+#endif
+#define WRN(...) EINA_LOG_DOM_WARN(_eulogium_lib_log_dom, __VA_ARGS__)
+#ifdef CRIT
+# undef CRIT
+#endif
+#define CRIT(...) EINA_LOG_DOM_CRIT(_eulogium_lib_log_dom, __VA_ARGS__)
+#ifdef DBG
+# undef DBG
+#endif
+#define DBG(...) EINA_LOG_DOM_DBG(_eulogium_lib_log_dom, __VA_ARGS__)
+
+#endif