summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2016-09-15 15:30:07 +0200
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2016-10-07 11:54:23 +0200
commit341ef8fc05b88ae8ee1c46de1baaf548cb5e4725 (patch)
tree5a41e3844503739049d25c3c4175197d017c14b1 /src
parent17885ed3758096f677a5f2f2c73e07e5ba926388 (diff)
downloadefl-341ef8fc05b88ae8ee1c46de1baaf548cb5e4725.tar.gz
eolian gen2: initial type generation bits
Diffstat (limited to 'src')
-rw-r--r--src/Makefile_Eolian.am4
-rw-r--r--src/bin/eolian2/main.c23
-rw-r--r--src/bin/eolian2/main.h2
-rw-r--r--src/bin/eolian2/types.c15
-rw-r--r--src/bin/eolian2/types.h6
5 files changed, 49 insertions, 1 deletions
diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am
index 06f4f924b1..654194a3a3 100644
--- a/src/Makefile_Eolian.am
+++ b/src/Makefile_Eolian.am
@@ -73,7 +73,9 @@ bin_PROGRAMS += \
bin_eolian2_eolian_gen2_SOURCES = \
bin/eolian2/main.c \
- bin/eolian2/main.h
+ bin/eolian2/main.h \
+ bin/eolian2/types.c \
+ bin/eolian2/types.h
bin_eolian2_eolian_gen2_CPPFLAGS = -I$(top_builddir)/src/lib/efl @EOLIAN_CFLAGS@
bin_eolian2_eolian_gen2_LDADD = @USE_EOLIAN_LIBS@
diff --git a/src/bin/eolian2/main.c b/src/bin/eolian2/main.c
index d8d945cc85..0e6b019e60 100644
--- a/src/bin/eolian2/main.c
+++ b/src/bin/eolian2/main.c
@@ -6,6 +6,7 @@
#include <libgen.h>
#include "main.h"
+#include "types.h"
int _eolian_gen_log_dom = -1;
@@ -201,12 +202,34 @@ _read_file(const char *fname)
return eina_strbuf_manage_new_length(cont, fs);
}
+char *eo_gen_class_full_name_get(const Eolian_Class *cl)
+{
+ Eina_Stringshare *cln = eolian_class_full_name_get(cl);
+ if (!cln)
+ return NULL;
+ char *buf = strdup(cln);
+ if (!buf)
+ return NULL;
+ for (char *p = strchr(buf, '.'); p; p = strchr(p, '.'))
+ *p = '_';
+ return buf;
+}
+
static Eina_Bool
_write_header(const char *ofname, const char *ifname, Eina_Bool legacy)
{
INF("generating header: %s (legacy: %d)", ofname, legacy);
Eina_Strbuf *buf = eina_strbuf_new();
+ Eina_Strbuf *cltd = eo_gen_class_typedef_gen(ifname);
+ if (cltd)
+ {
+ cltd = _include_guard(ifname, "CLASS_TYPE", cltd);
+ eina_strbuf_append(buf, eina_strbuf_string_get(cltd));
+ eina_strbuf_append_char(buf, '\n');
+ eina_strbuf_free(cltd);
+ }
+
Eina_Bool ret = _write_file(ofname, buf, EINA_FALSE);
eina_strbuf_free(buf);
return ret;
diff --git a/src/bin/eolian2/main.h b/src/bin/eolian2/main.h
index e80e5dc7bb..985e806ef0 100644
--- a/src/bin/eolian2/main.h
+++ b/src/bin/eolian2/main.h
@@ -31,4 +31,6 @@ extern int _eolian_gen_log_dom;
#endif
#define CRIT(...) EINA_LOG_DOM_CRIT(_eolian_gen_log_dom, __VA_ARGS__)
+char *eo_gen_class_full_name_get(const Eolian_Class *cl);
+
#endif
diff --git a/src/bin/eolian2/types.c b/src/bin/eolian2/types.c
new file mode 100644
index 0000000000..4669e281c1
--- /dev/null
+++ b/src/bin/eolian2/types.c
@@ -0,0 +1,15 @@
+#include "main.h"
+
+Eina_Strbuf *eo_gen_class_typedef_gen(const char *eof)
+{
+ const Eolian_Class *cl = eolian_class_get_by_file(eof);
+ if (!cl)
+ return NULL;
+ char *clfn = eo_gen_class_full_name_get(cl);
+ if (!clfn)
+ return NULL;
+ Eina_Strbuf *ret = eina_strbuf_new();
+ eina_strbuf_append_printf(ret, "typedef Eo %s;\n", clfn);
+ free(clfn);
+ return ret;
+}
diff --git a/src/bin/eolian2/types.h b/src/bin/eolian2/types.h
new file mode 100644
index 0000000000..2f4434ecaa
--- /dev/null
+++ b/src/bin/eolian2/types.h
@@ -0,0 +1,6 @@
+#ifndef EOLIAN_GEN_TYPES_H
+#define EOLIAN_GEN_TYPES_H
+
+Eina_Strbuf *eo_gen_class_typedef_gen(const char *eof);
+
+#endif