summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2015-01-06 20:05:47 -0200
committerFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2015-01-06 20:05:47 -0200
commitebd3514937e23abc6ee3f9a510e1bd2b91273fce (patch)
tree1f3a10c699edf9b70eb682d38cc1025ea53afb7c
parentd9c64b3697524bbebd549a57ff2c466629979229 (diff)
downloadefl-ebd3514937e23abc6ee3f9a510e1bd2b91273fce.tar.gz
Started compatibilization for nodejs/libv8/libuv
Modified configure.ac to allow compatibilization for versions of libv8 etc.
-rw-r--r--configure.ac44
-rw-r--r--src/Makefile_Eina_Js.am1
-rw-r--r--src/Makefile_Eo_Js.am1
-rw-r--r--src/Makefile_Eolian_Js.am4
-rw-r--r--src/bin/eolian_js/main.cc2
-rw-r--r--src/bindings/eina_js/eina_js_accessor.hh2
-rw-r--r--src/bindings/eina_js/eina_js_compatibility.hh (renamed from src/bindings/eo_js/eo_js_compatibility.hh)12
-rw-r--r--src/bindings/eina_js/eina_js_container.cc2
-rw-r--r--src/bindings/eina_js/eina_js_error.cc6
-rw-r--r--src/bindings/eina_js/eina_js_error.hh2
-rw-r--r--src/bindings/eina_js/eina_js_iterator.hh2
-rw-r--r--src/bindings/eina_js/eina_js_list.hh3
-rw-r--r--src/bindings/eina_js/eina_js_log.cc8
-rw-r--r--src/bindings/eina_js/eina_js_log.hh2
-rw-r--r--src/bindings/eina_js/eina_js_value.cc178
-rw-r--r--src/bindings/eina_js/eina_js_value.hh17
-rw-r--r--src/bindings/eo_js/Eo_Js.hh1
-rw-r--r--src/bindings/eo_js/eo_js_call_function.hh2
-rw-r--r--src/bindings/eo_js/eo_js_construct_from_eo.hh2
-rw-r--r--src/bindings/eo_js/eo_js_constructor.hh6
-rw-r--r--src/bindings/eo_js/eo_js_event.hh2
-rw-r--r--src/bindings/eo_js/eo_js_get_value.hh8
-rw-r--r--src/bindings/eo_js/eo_js_get_value_from_c.hh4
-rw-r--r--src/bindings/eolian_js/main.cc2
-rw-r--r--src/lib/ecore/ecore_main.c28
-rw-r--r--src/tests/eina_js/eina_js_suite.cc2
26 files changed, 190 insertions, 153 deletions
diff --git a/configure.ac b/configure.ac
index acff24a232..907d9ca582 100644
--- a/configure.ac
+++ b/configure.ac
@@ -999,16 +999,46 @@ EFL_EVAL_PKGS([EINA_CXX])
EFL_LIB_END([Eina_Cxx])
#### End of Eina CXX
-AC_ARG_ENABLE([js-bindings],
- [AS_HELP_STRING([--enable-js-bindings],[enable JavaScript bindings. @<:@default=disabled@:>@])],
- [want_js="${enableval}"], [want_js="no"])
-AM_CONDITIONAL([HAVE_JS], [test "x${want_js}" = "xyes"])
+AC_ARG_WITH([js],
+ [AS_HELP_STRING([--with-js=@<:@nodejs/libv8/libuv/none@:>@],[enable JavaScript bindings using nodejs or libv8/libuv as build dependencies. The libuv option implies libv8. @<:@default=none@:>@])],
+ [want_js="${withval}"], [want_js="none"])
+
+AC_LANG_PUSH([C++])
+case "$want_js" in
+ nodejs)
+ AM_CONDITIONAL([HAVE_JS], [1])
+ AC_CHECK_HEADER([node/v8.h],
+ [
+ AC_DEFINE_UNQUOTED([V8_INCLUDE_HEADER], ["node/v8.h"], [Include header for libv8])
+ AC_DEFINE_UNQUOTED([UV_INCLUDE_HEADER], ["node/uv.h"], [Include header for libuv])
+ ],
+ [AC_MSG_ERROR([Could not find include headers from nodejs.])])
+ ;;
+ libv8)
+ AM_CONDITIONAL([HAVE_JS], [1])
+ EFL_DEPEND_PKG([EINA_JS], [V8], [v8 >= 3.25.28])
+ EFL_DEPEND_PKG([EO_JS], [V8], [v8 >= 3.25.28])
+ AC_DEFINE_UNQUOTED([V8_INCLUDE_HEADER], ["v8.h"], [Include header for libv8])
+ ;;
+ libuv)
+ AM_CONDITIONAL([HAVE_JS], [1])
+ EFL_DEPEND_PKG([EINA_JS], [V8], [v8 >= 3.25.28])
+ EFL_DEPEND_PKG([EINA_JS], [UV], [v8 >= 1.1.0])
+ EFL_DEPEND_PKG([EO_JS], [V8], [v8 >= 3.25.28])
+ EFL_DEPEND_PKG([EO_JS], [UV], [v8 >= 1.1.0])
+ AC_DEFINE_UNQUOTED([V8_INCLUDE_HEADER], ["v8.h"], [Include header for libv8])
+ AC_DEFINE_UNQUOTED([UV_INCLUDE_HEADER], ["uv.h"], [Include header for libuv])
+ ;;
+ none)
+ AM_CONDITIONAL([HAVE_JS], [0])
+ ;;
+ *) AC_MSG_ERROR([Invalid javascript dependency (${want_js}): must be none, nodejs, libv8 or libuv]) ;;
+esac
+AC_LANG_POP([C++])
#### Eina JS
EFL_LIB_START([Eina_Js])
-EFL_DEPEND_PKG([EINA_JS], [V8], [v8 >= 3.25.28])
-
EFL_INTERNAL_DEPEND_PKG([EINA_JS], [eina])
EFL_ADD_CFLAGS([EINA_JS], [${EFL_PTHREAD_CFLAGS}])
EFL_EVAL_PKGS([EINA_JS])
@@ -1019,8 +1049,6 @@ EFL_LIB_END([Eina_Js])
#### Eina JS
EFL_LIB_START([Eo_Js])
-EFL_DEPEND_PKG([EO_JS], [V8], [v8 >= 3.25.28])
-
EFL_INTERNAL_DEPEND_PKG([EO_JS], [eina])
EFL_ADD_CFLAGS([EO_JS], [${EFL_PTHREAD_CFLAGS}])
EFL_EVAL_PKGS([EO_JS])
diff --git a/src/Makefile_Eina_Js.am b/src/Makefile_Eina_Js.am
index f4003e3288..8f56f105c7 100644
--- a/src/Makefile_Eina_Js.am
+++ b/src/Makefile_Eina_Js.am
@@ -19,6 +19,7 @@ lib_eina_js_libeina_js_la_DEPENDENCIES = @EINA_INTERNAL_LIBS@ @DL_INTERNAL_LIBS@
lib_eina_js_libeina_js_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
lib_eina_js_libeina_js_la_SOURCES = \
+bindings/eina_js/eina_js_compatibility.hh \
bindings/eina_js/eina_js_container.cc \
bindings/eina_js/eina_js_value.cc \
bindings/eina_js/eina_js_error.cc \
diff --git a/src/Makefile_Eo_Js.am b/src/Makefile_Eo_Js.am
index e2ec258609..43c8579ac0 100644
--- a/src/Makefile_Eo_Js.am
+++ b/src/Makefile_Eo_Js.am
@@ -11,7 +11,6 @@ bindings/eo_js/eo_js_get_value_from_c.hh \
bindings/eo_js/eo_js_get_value.hh \
bindings/eo_js/eo_js_event.hh \
bindings/eo_js/eo_js_construct_from_eo.hh \
-bindings/eo_js/eo_js_compatibility.hh \
bindings/eo_js/Eo_Js.hh
### Unit tests
diff --git a/src/Makefile_Eolian_Js.am b/src/Makefile_Eolian_Js.am
index 88008c7f43..b8adba2b0d 100644
--- a/src/Makefile_Eolian_Js.am
+++ b/src/Makefile_Eolian_Js.am
@@ -27,7 +27,7 @@ lib_eolian_js_libeolian_js_la_SOURCES =\
$(generated_evas_canvas_js_bindings)
lib_eolian_js_libeolian_js_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl -I$(top_builddir)/src/lib/efl/interfaces \
-@EINA_CFLAGS@ @EINA_CXX_CFLAGS@ @EO_JS_CFLAGS@ @EO_CFLAGS@ @EVAS_CFLAGS@ @ECORE_CFLAGS@ @ECORE_EVAS_CFLAGS@ @EINA_CFLAGS@ \
+@EINA_CFLAGS@ @EINA_CXX_CFLAGS@ @EINA_JS_CFLAGS@ @EO_JS_CFLAGS@ @EO_CFLAGS@ @EVAS_CFLAGS@ @ECORE_CFLAGS@ @ECORE_EVAS_CFLAGS@ @EINA_CFLAGS@ \
-I$(top_builddir)/src/lib/evas/canvas \
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
@@ -66,7 +66,7 @@ tests_eolian_js_eolian_js_suite_CXXFLAGS = \
-DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)/src/tests/eolian_js\" \
-DPACKAGE_DATA_DIR=\"$(datadir)/eolian_js\" \
-DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/eolian_js\" \
-@CHECK_CFLAGS@ @EOLIAN_CXX_CFLAGS@ @EO_JS_CFLAGS@ @EINA_JS_CFLAGS@ \
+@CHECK_CFLAGS@ @EOLIAN_CXX_CFLAGS@ @EINA_JS_CFLAGS@ @EO_JS_CFLAGS@ @EINA_JS_CFLAGS@ \
@EOLIAN_CFLAGS@ @EINA_CFLAGS@ @EO_CFLAGS@ @ECORE_CFLAGS@ @EINA_CXX_CFLAGS@ \
@EO_JS_CFLAGS@ @EO_CXX_CFLAGS@
diff --git a/src/bin/eolian_js/main.cc b/src/bin/eolian_js/main.cc
index 5c4c5ebd1e..d8c98192e0 100644
--- a/src/bin/eolian_js/main.cc
+++ b/src/bin/eolian_js/main.cc
@@ -243,7 +243,7 @@ int main(int argc, char** argv)
os << "}\n\n";
}
os << "#include <Eo_Js.hh>\n\n";
- os << "#include <node/v8.h>\n\n";
+ os << "#include V8_INCLUDE_HEADER\n\n";
os << "extern \"C\" {\n";
if(is_evas(klass))
diff --git a/src/bindings/eina_js/eina_js_accessor.hh b/src/bindings/eina_js/eina_js_accessor.hh
index 148f611326..807af4075c 100644
--- a/src/bindings/eina_js/eina_js_accessor.hh
+++ b/src/bindings/eina_js/eina_js_accessor.hh
@@ -1,7 +1,7 @@
#ifndef EINA_JS_ACCESSOR_HH
#define EINA_JS_ACCESSOR_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <Eina.hh>
#include <memory>
diff --git a/src/bindings/eo_js/eo_js_compatibility.hh b/src/bindings/eina_js/eina_js_compatibility.hh
index b0a8087240..8a75b29c37 100644
--- a/src/bindings/eo_js/eo_js_compatibility.hh
+++ b/src/bindings/eina_js/eina_js_compatibility.hh
@@ -1,13 +1,9 @@
-#ifndef EFL_EO_JS_COMPATIBILITY_HH
-#define EFL_EO_JS_COMPATIBILITY_HH
+#ifndef EFL_EINA_JS_COMPATIBILITY_HH
+#define EFL_EINA_JS_COMPATIBILITY_HH
#include <type_traits>
-#if 0
-#include <v8.h>
-#else
-#include <node/v8.h>
-#endif
+#include V8_INCLUDE_HEADER
namespace v8 {
@@ -16,7 +12,7 @@ struct FunctionCallbackInfo;
}
-namespace efl { namespace eo { namespace js {
+namespace efl { namespace eina { namespace js {
template <typename T = v8::External, typename Enable = void>
struct _libv8_isolate_test;
diff --git a/src/bindings/eina_js/eina_js_container.cc b/src/bindings/eina_js/eina_js_container.cc
index 892bac14fc..b92a39f4af 100644
--- a/src/bindings/eina_js/eina_js_container.cc
+++ b/src/bindings/eina_js/eina_js_container.cc
@@ -2,7 +2,7 @@
#include <config.h>
#endif
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <Eina.h>
#include <cstdlib>
diff --git a/src/bindings/eina_js/eina_js_error.cc b/src/bindings/eina_js/eina_js_error.cc
index 7f71829fd7..fceffb1492 100644
--- a/src/bindings/eina_js/eina_js_error.cc
+++ b/src/bindings/eina_js/eina_js_error.cc
@@ -4,7 +4,7 @@
#include <eina_js_error.hh>
-namespace efl { namespace js {
+namespace efl { namespace eina {namespace js {
EAPI
void convert_error_to_javascript_exception(v8::Isolate *isolate)
@@ -17,7 +17,7 @@ void convert_error_to_javascript_exception(v8::Isolate *isolate)
if (!err)
return;
- Local<Object> je = Object::New(isolate);
+ Local<Object> je = compatibility_new<v8::Object>(isolate);
je->Set(String::NewFromUtf8(isolate, "code"),
String::NewFromUtf8(isolate, "Eina_Error"));
je->Set(String::NewFromUtf8(isolate, "value"),
@@ -25,4 +25,4 @@ void convert_error_to_javascript_exception(v8::Isolate *isolate)
isolate->ThrowException(je);
}
-} } // namespace efl { namespace js {
+} } } // namespace efl { namespace js {
diff --git a/src/bindings/eina_js/eina_js_error.hh b/src/bindings/eina_js/eina_js_error.hh
index e20d4d2670..4e6be83bb1 100644
--- a/src/bindings/eina_js/eina_js_error.hh
+++ b/src/bindings/eina_js/eina_js_error.hh
@@ -1,7 +1,7 @@
#ifndef EINA_JS_ERROR_HH
#define EINA_JS_ERROR_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <Eina.hh>
namespace efl { namespace js {
diff --git a/src/bindings/eina_js/eina_js_iterator.hh b/src/bindings/eina_js/eina_js_iterator.hh
index e3b8a3b39c..cebaf79a83 100644
--- a/src/bindings/eina_js/eina_js_iterator.hh
+++ b/src/bindings/eina_js/eina_js_iterator.hh
@@ -1,7 +1,7 @@
#ifndef EINA_JS_ITERATOR_HH
#define EINA_JS_ITERATOR_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <Eina.hh>
#include <type_traits>
diff --git a/src/bindings/eina_js/eina_js_list.hh b/src/bindings/eina_js/eina_js_list.hh
index 57002ffe6b..420e7ed7f4 100644
--- a/src/bindings/eina_js/eina_js_list.hh
+++ b/src/bindings/eina_js/eina_js_list.hh
@@ -4,6 +4,7 @@
#include <iostream>
#include <eina_js_container.hh>
+#include <eina_js_compatibility.hh>
#include <Eina.hh>
#include <iterator>
@@ -31,7 +32,7 @@ struct eina_container_common : eina_container_type_specific<C, typename C::value
s << ",";
}
std::cout << "string " << s.str() << std::endl;
- return v8::String::NewFromUtf8(isolate, s.str().c_str());
+ return compatibility_new<v8::String>(isolate, s.str().c_str());
}
C _container;
diff --git a/src/bindings/eina_js/eina_js_log.cc b/src/bindings/eina_js/eina_js_log.cc
index 839e63bafd..c9d34c5f55 100644
--- a/src/bindings/eina_js/eina_js_log.cc
+++ b/src/bindings/eina_js/eina_js_log.cc
@@ -5,8 +5,9 @@
#include <string>
#include <eina_js_log.hh>
#include <eina_js_value.hh>
+#include <eina_js_compatibility.hh>
-namespace efl { namespace js {
+namespace efl { namespace eina { namespace js {
v8::Local<v8::String> to_v8_string(v8::Isolate *isolate, const char *fmt,
va_list args)
@@ -20,8 +21,7 @@ v8::Local<v8::String> to_v8_string(v8::Isolate *isolate, const char *fmt,
s.size());
#else
auto s = eina_stringshare_vprintf(fmt, args);
- auto ret = v8::String::NewFromUtf8(isolate, s, v8::String::kNormalString,
- eina_stringshare_strlen(s));
+ auto ret = compatibility_new<v8::String>(isolate, s);
eina_stringshare_del(s);
return ret;
#endif
@@ -609,4 +609,4 @@ void register_log_timing(v8::Isolate *isolate, v8::Handle<v8::Object> global,
global->Set(name, FunctionTemplate::New(isolate, func)->GetFunction());
}
-} } // namespace efl { namespace js {
+} } } // namespace efl { namespace js {
diff --git a/src/bindings/eina_js/eina_js_log.hh b/src/bindings/eina_js/eina_js_log.hh
index f22b3c9a75..58a852c3d5 100644
--- a/src/bindings/eina_js/eina_js_log.hh
+++ b/src/bindings/eina_js/eina_js_log.hh
@@ -1,7 +1,7 @@
#ifndef EINA_JS_LOG_HH
#define EINA_JS_LOG_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <Eina.hh>
#include <type_traits>
diff --git a/src/bindings/eina_js/eina_js_value.cc b/src/bindings/eina_js/eina_js_value.cc
index bcfc578920..4c91e10b0b 100644
--- a/src/bindings/eina_js/eina_js_value.cc
+++ b/src/bindings/eina_js/eina_js_value.cc
@@ -3,95 +3,105 @@
#endif
#include <eina_js_value.hh>
+#include <eina_js_compatibility.hh>
-namespace efl { namespace js {
+namespace efl { namespace eina { namespace js {
-EAPI
-void register_make_value(v8::Isolate *isolate, v8::Handle<v8::Object> global,
- v8::Handle<v8::String> name)
-{
- using v8::Isolate;
- using v8::Local;
- using v8::Value;
- using v8::Integer;
- using v8::String;
- using v8::Object;
- using v8::FunctionTemplate;
- using v8::FunctionCallbackInfo;
-
- typedef ::efl::eina::value value_type;
- typedef value_type *ptr_type;
+namespace {
- auto ctor = [](const FunctionCallbackInfo<Value> &info) {
- auto set = [](const FunctionCallbackInfo<Value> &info) {
- if (info.Length() != 1)
- return;
-
- void *ptr = info.Holder()->GetAlignedPointerFromInternalField(0);
- Isolate *isolate = info.GetIsolate();
- try {
- *static_cast<ptr_type>(ptr) = value_cast<value_type>(info[0]);
- } catch(const std::bad_cast &e) {
- Local<Object> je = Object::New(isolate);
- je->Set(String::NewFromUtf8(isolate, "code"),
- String::NewFromUtf8(isolate, "std::bad_cast"));
- isolate->ThrowException(je);
- } catch(const ::efl::eina::system_error &e) {
- Local<Object> je = Object::New(isolate);
- je->Set(String::NewFromUtf8(isolate, "code"),
- String::NewFromUtf8(isolate, "std::error_code"));
- je->Set(String::NewFromUtf8(isolate, "category"),
- String::NewFromUtf8(isolate, e.code().category().name()));
- je->Set(String::NewFromUtf8(isolate, "value"),
- Integer::New(isolate, e.code().value()));
- isolate->ThrowException(je);
- }
- };
- auto get = [](const FunctionCallbackInfo<Value> &info) {
- void *ptr = info.Holder()->GetAlignedPointerFromInternalField(0);
- auto &value = *static_cast<ptr_type>(ptr);
- info.GetReturnValue().Set(value_cast<Local<Value>>
- (value, info.GetIsolate()));
- };
+compatibility_return_type eina_value_set(compatibility_callback_info_type args)
+{
+ if (args.Length() != 1)
+ return compatibility_return(args);
+
+ void *ptr = args.Holder()->GetAlignedPointerFromInternalField(0);
+ Isolate *isolate = args.GetIsolate();
+ try {
+ *static_cast<ptr_type>(ptr) = value_cast<value_type>(info[0]);
+ } catch(const std::bad_cast &e) {
+ Local<Object> je = Object::New(isolate);
+ je->Set(String::NewFromUtf8(isolate, "code"),
+ String::NewFromUtf8(isolate, "std::bad_cast"));
+ isolate->ThrowException(je);
+ } catch(const ::efl::eina::system_error &e) {
+ Local<Object> je = Object::New(isolate);
+ je->Set(String::NewFromUtf8(isolate, "code"),
+ String::NewFromUtf8(isolate, "std::error_code"));
+ je->Set(String::NewFromUtf8(isolate, "category"),
+ String::NewFromUtf8(isolate, e.code().category().name()));
+ je->Set(String::NewFromUtf8(isolate, "value"),
+ Integer::New(isolate, e.code().value()));
+ isolate->ThrowException(je);
+ }
+}
- if (info.Length() != 1)
- return;
+compatibility_return_type eina_value_get(compatibility_callback_info_type args)
+{
+ void *ptr = info.Holder()->GetAlignedPointerFromInternalField(0);
+ auto &value = *static_cast<ptr_type>(ptr);
+ info.GetReturnValue().Set(value_cast<Local<Value>>
+ (value, info.GetIsolate()));
+}
- Isolate *isolate = info.GetIsolate();
- auto obj_tpl = v8::ObjectTemplate::New(isolate);
- obj_tpl->SetInternalFieldCount(1);
-
- auto ret = obj_tpl->NewInstance();
- info.GetReturnValue().Set(ret);
-
- ret->Set(String::NewFromUtf8(isolate, "set"),
- FunctionTemplate::New(isolate, set)->GetFunction());
- ret->Set(String::NewFromUtf8(isolate, "get"),
- FunctionTemplate::New(isolate, get)->GetFunction());
-
- try {
- std::unique_ptr<value_type>
- ptr(new value_type(value_cast<value_type>(info[0])));
- ret->SetAlignedPointerInInternalField(0, ptr.get());
- ptr.release();
- } catch(const std::bad_cast &e) {
- Local<Object> je = Object::New(isolate);
- je->Set(String::NewFromUtf8(isolate, "code"),
- String::NewFromUtf8(isolate, "std::bad_cast"));
- isolate->ThrowException(je);
- } catch(const ::efl::eina::system_error &e) {
- Local<Object> je = Object::New(isolate);
- je->Set(String::NewFromUtf8(isolate, "code"),
- String::NewFromUtf8(isolate, "std::error_code"));
- je->Set(String::NewFromUtf8(isolate, "category"),
- String::NewFromUtf8(isolate, e.code().category().name()));
- je->Set(String::NewFromUtf8(isolate, "value"),
- Integer::New(isolate, e.code().value()));
- isolate->ThrowException(je);
- }
- };
+compatibility_return_type eina_value_constructor(compatibility_callback_info_type args)
+{
+ if (info.Length() != 1)
+ return;
+
+ try {
+ std::unique_ptr<value_type>
+ ptr(new value_type(value_cast<value_type>(info[0])));
+ ret->SetAlignedPointerInInternalField(0, ptr.get());
+ ptr.release();
+ } catch(const std::bad_cast &e) {
+ Local<Object> je = Object::New(isolate);
+ je->Set(String::NewFromUtf8(isolate, "code"),
+ String::NewFromUtf8(isolate, "std::bad_cast"));
+ isolate->ThrowException(je);
+ } catch(const ::efl::eina::system_error &e) {
+ Local<Object> je = Object::New(isolate);
+ je->Set(String::NewFromUtf8(isolate, "code"),
+ String::NewFromUtf8(isolate, "std::error_code"));
+ je->Set(String::NewFromUtf8(isolate, "category"),
+ String::NewFromUtf8(isolate, e.code().category().name()));
+ je->Set(String::NewFromUtf8(isolate, "value"),
+ Integer::New(isolate, e.code().value()));
+ isolate->ThrowException(je);
+ }
+}
- global->Set(name, FunctionTemplate::New(isolate, ctor)->GetFunction());
+}
+
+EAPI
+void register_make_value(v8::Isolate *isolate, v8::Handle<v8::Object> global,
+ v8::Handle<v8::String> name)
+{
+ using v8::Isolate;
+ using v8::Local;
+ using v8::Value;
+ using v8::Integer;
+ using v8::String;
+ using v8::Object;
+ using v8::FunctionTemplate;
+ using v8::FunctionCallbackInfo;
+
+ typedef ::efl::eina::value value_type;
+ typedef value_type *ptr_type;
+
+ v8::FunctionTemplate constructor
+ = compatibility_new<FunctionTemplate>(isolate, &eina_value_constructor);
+
+ auto instance = constructor->InstanceTemplate();
+ instance_template->SetInternalFieldCount(1);
+
+ auto prototype = constructor->PrototypeTemplate();
+
+ prototype->Set(compatibility_new<v8::String>(isolate, "set")
+ , compatibility_new<FunctionTemplate>(isolate, &eina_value_set));
+ prototype->Set(compatibility_new<v8::String>(isolate, "get")
+ , compatibility_new<FunctionTemplate>(isolate, &eina_value_get));
+
+ global->Set(name, constructor->GetFunction());
}
EAPI
@@ -119,4 +129,4 @@ void register_destroy_value(v8::Isolate *isolate, v8::Handle<v8::Object> global,
global->Set(name, FunctionTemplate::New(isolate, dtor)->GetFunction());
}
-} } // namespace efl { namespace js {
+} } } // namespace efl { namespace js {
diff --git a/src/bindings/eina_js/eina_js_value.hh b/src/bindings/eina_js/eina_js_value.hh
index 853b8cf4b8..417a054448 100644
--- a/src/bindings/eina_js/eina_js_value.hh
+++ b/src/bindings/eina_js/eina_js_value.hh
@@ -1,11 +1,13 @@
#ifndef EINA_JS_VALUE_HH
#define EINA_JS_VALUE_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <Eina.hh>
#include <type_traits>
-namespace efl { namespace js {
+#include <eina_js_compatibility.hh>
+
+namespace efl { namespace eina { namespace js {
namespace detail {
@@ -27,7 +29,7 @@ typename std::enable_if<is_representable_as_v8_integer<T>::value
v8::Local<v8::Value>>::type
to_v8_number(const T &v, v8::Isolate *isolate)
{
- return v8::Integer::New(isolate, v);
+ return compatibility_new<v8::Integer>(isolate, v);
}
template<class T>
@@ -36,7 +38,7 @@ typename std::enable_if<is_representable_as_v8_integer<T>::value
v8::Local<v8::Value>>::type
to_v8_number(const T &v, v8::Isolate *isolate)
{
- return v8::Integer::NewFromUnsigned(isolate, v);
+ return compatibility_new<v8::Integer>(isolate, v);
}
template<class T>
@@ -46,7 +48,7 @@ typename std::enable_if<(std::is_integral<T>::value
v8::Local<v8::Value>>::type
to_v8_number(const T &v, v8::Isolate *isolate)
{
- return v8::Number::New(isolate, v);
+ return compatibility_new<v8::Number>(isolate, v);
}
template<class T>
@@ -55,8 +57,7 @@ typename std::enable_if<std::is_same<T, ::efl::eina::stringshare>::value
v8::Local<v8::Value>>::type
to_v8_string(const T &v, v8::Isolate *isolate)
{
- return v8::String::NewFromUtf8(isolate, v.c_str(),
- v8::String::kNormalString, v.size());
+ return compatibility_new<v8::String>(isolate, v.c_str());
}
} // namespace detail
@@ -139,6 +140,6 @@ void register_make_value(v8::Isolate *isolate, v8::Handle<v8::Object> global,
void register_destroy_value(v8::Isolate *isolate, v8::Handle<v8::Object> global,
v8::Handle<v8::String> name);
-} } // namespace efl::js
+} } } // namespace efl::js
#endif /* EINA_JS_VALUE_HH */
diff --git a/src/bindings/eo_js/Eo_Js.hh b/src/bindings/eo_js/Eo_Js.hh
index 289be71581..242c5fed1c 100644
--- a/src/bindings/eo_js/Eo_Js.hh
+++ b/src/bindings/eo_js/Eo_Js.hh
@@ -1,7 +1,6 @@
#ifndef EFL_EO_JS_HH
#define EFL_EO_JS_HH
-#include <eo_js_compatibility.hh>
#include <eo_js_direction.hh>
#include <eo_js_constructor.hh>
#include <eo_js_call_function.hh>
diff --git a/src/bindings/eo_js/eo_js_call_function.hh b/src/bindings/eo_js/eo_js_call_function.hh
index a0efebb527..7904b0b4c6 100644
--- a/src/bindings/eo_js/eo_js_call_function.hh
+++ b/src/bindings/eo_js/eo_js_call_function.hh
@@ -1,7 +1,7 @@
#ifndef EFL_EO_JS_CALL_FUNCTION_HH
#define EFL_EO_JS_CALL_FUNCTION_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <eina_tuple.hh>
#include <eina_tuple_c.hh>
diff --git a/src/bindings/eo_js/eo_js_construct_from_eo.hh b/src/bindings/eo_js/eo_js_construct_from_eo.hh
index 8daf38cc72..f4a23c879a 100644
--- a/src/bindings/eo_js/eo_js_construct_from_eo.hh
+++ b/src/bindings/eo_js/eo_js_construct_from_eo.hh
@@ -1,7 +1,7 @@
#ifndef EFL_EO_JS_CONSTRUCT_FROM_EO_HH
#define EFL_EO_JS_CONSTRUCT_FROM_EO_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <eina_tuple.hh>
#include <eina_tuple_c.hh>
diff --git a/src/bindings/eo_js/eo_js_constructor.hh b/src/bindings/eo_js/eo_js_constructor.hh
index 4328ff4d8e..c7210731c3 100644
--- a/src/bindings/eo_js/eo_js_constructor.hh
+++ b/src/bindings/eo_js/eo_js_constructor.hh
@@ -1,11 +1,7 @@
#ifndef EFL_EO_JS_CONSTRUCTOR_HH
#define EFL_EO_JS_CONSTRUCTOR_HH
-#if 0
-#include <v8.h>
-#else
-#include <node/v8.h>
-#endif
+#include V8_INCLUDE_HEADER
#include <eina_tuple.hh>
#include <eina_function.hh>
diff --git a/src/bindings/eo_js/eo_js_event.hh b/src/bindings/eo_js/eo_js_event.hh
index 43892950f8..9d9056b1fa 100644
--- a/src/bindings/eo_js/eo_js_event.hh
+++ b/src/bindings/eo_js/eo_js_event.hh
@@ -1,7 +1,7 @@
#ifndef EFL_EO_JS_EVENT_HH
#define EFL_EO_JS_EVENT_HH
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <eina_tuple.hh>
#include <eina_tuple_c.hh>
diff --git a/src/bindings/eo_js/eo_js_get_value.hh b/src/bindings/eo_js/eo_js_get_value.hh
index c825924b9a..1083580915 100644
--- a/src/bindings/eo_js/eo_js_get_value.hh
+++ b/src/bindings/eo_js/eo_js_get_value.hh
@@ -1,13 +1,9 @@
#ifndef EFL_EO_JS_GET_VALUE_HH
#define EFL_EO_JS_GET_VALUE_HH
-#include <eo_js_compatibility.hh>
+#include <eina_js_compatibility.hh>
-#if 0
-#include <v8.h>
-#else
-#include <node/v8.h>
-#endif
+#include V8_INCLUDE_HEADER
#include <type_traits>
#include <cstdlib>
diff --git a/src/bindings/eo_js/eo_js_get_value_from_c.hh b/src/bindings/eo_js/eo_js_get_value_from_c.hh
index 8025e784bd..bf2d2ca89a 100644
--- a/src/bindings/eo_js/eo_js_get_value_from_c.hh
+++ b/src/bindings/eo_js/eo_js_get_value_from_c.hh
@@ -1,9 +1,9 @@
#ifndef EFL_EO_JS_GET_VALUE_FROM_C_HH
#define EFL_EO_JS_GET_VALUE_FROM_C_HH
-#include <eo_js_compatibility.hh>
+#include <eina_js_compatibility.hh>
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <type_traits>
#include <cstdlib>
diff --git a/src/bindings/eolian_js/main.cc b/src/bindings/eolian_js/main.cc
index 94682f3f6f..d8251a7adc 100644
--- a/src/bindings/eolian_js/main.cc
+++ b/src/bindings/eolian_js/main.cc
@@ -4,7 +4,7 @@
#endif
#include <node/node.h>
-#include <node/uv.h>
+#include UV_INCLUDE_HEADER
#include <iostream>
diff --git a/src/lib/ecore/ecore_main.c b/src/lib/ecore/ecore_main.c
index 762ed4fab2..e4392f79fd 100644
--- a/src/lib/ecore/ecore_main.c
+++ b/src/lib/ecore/ecore_main.c
@@ -158,12 +158,7 @@ timerfd_settime(int fd EINA_UNUSED,
#endif
#ifdef USE_LIBUV
-#define USE_NODEJS
-#ifdef USE_NODEJS
-#include <node/uv.h>
-#else
-#include <uv.h>
-#endif
+#include UV_INCLUDE_HEADER
#include <dlfcn.h>
static uv_prepare_t _ecore_main_uv_prepare;
static uv_check_t _ecore_main_uv_check;
@@ -464,7 +459,9 @@ _ecore_main_fdh_poll_add(Ecore_Fd_Handler *fdh)
DBG("_ecore_main_fdh_poll_add");
int r = 0;
+#ifdef USE_LIBUV
if(!_dl_uv_run)
+#endif
{
if ((!fdh->file) && HAVE_EPOLL && epoll_fd >= 0)
{
@@ -472,7 +469,9 @@ _ecore_main_fdh_poll_add(Ecore_Fd_Handler *fdh)
_ecore_poll_events_from_fdh(fdh), fdh);
}
}
+#ifdef USE_LIBUV
else
+#endif
{
#ifdef USE_LIBUV
if(!fdh->file)
@@ -511,7 +510,9 @@ _ecore_main_fdh_poll_add(Ecore_Fd_Handler *fdh)
static inline void
_ecore_main_fdh_poll_del(Ecore_Fd_Handler *fdh)
{
+#ifdef USE_LIBUV
if(!_dl_uv_run)
+#endif
{
if ((!fdh->file) && HAVE_EPOLL && epoll_fd >= 0)
{
@@ -537,7 +538,9 @@ _ecore_main_fdh_poll_del(Ecore_Fd_Handler *fdh)
}
}
}
+#ifdef USE_LIBUV
else
+#endif
{
#ifdef USE_LIBUV
DBG("_ecore_main_fdh_poll_del libuv %p", fdh);
@@ -558,7 +561,9 @@ _ecore_main_fdh_poll_modify(Ecore_Fd_Handler *fdh)
{
DBG("_ecore_main_fdh_poll_modify %p", fdh);
int r = 0;
+#ifdef USE_LIBUV
if(!_dl_uv_run)
+#endif
{
if ((!fdh->file) && HAVE_EPOLL && epoll_fd >= 0)
{
@@ -572,7 +577,9 @@ _ecore_main_fdh_poll_modify(Ecore_Fd_Handler *fdh)
r = epoll_ctl(efd, EPOLL_CTL_MOD, fdh->fd, &ev);
}
}
+#ifdef USE_LIBUV
else
+#endif
{
#ifdef USE_LIBUV
abort();
@@ -956,8 +963,9 @@ detect_time_changes_stop(void)
#endif
}
-static void _ecore_main_loop_idler_cb(uv_idle_t* handle EINA_UNUSED);
+//static void _ecore_main_loop_idler_cb(uv_idle_t* handle EINA_UNUSED);
+#ifdef USE_LIBUV
static
void _ecore_main_loop_timer_run(uv_timer_t* timer)
{
@@ -1043,8 +1051,7 @@ void _ecore_main_loop_timer_run(uv_timer_t* timer)
DBG("exit\n");
}
-
-static void _ecore_main_loop_uv_prepare(uv_prepare_t* handle);
+//static void _ecore_main_loop_uv_prepare(uv_prepare_t* handle);
static void
_ecore_main_loop_idler_cb(uv_idle_t* handle EINA_UNUSED)
@@ -1135,6 +1142,7 @@ _ecore_main_loop_uv_check(uv_check_t* handle EINA_UNUSED)
in_main_loop--;
_ecore_unlock();
}
+#endif
void
_ecore_main_loop_init(void)
@@ -2186,6 +2194,7 @@ _ecore_main_fd_handlers_buf_call(void)
return ret;
}
+#ifdef USE_LIBUV
static void
_ecore_main_loop_uv_prepare(uv_prepare_t* handle EINA_UNUSED)
{
@@ -2276,6 +2285,7 @@ _ecore_main_loop_uv_prepare(uv_prepare_t* handle EINA_UNUSED)
_ecore_unlock();
in_main_loop--;
}
+#endif
#if !defined(USE_G_MAIN_LOOP)
enum {
diff --git a/src/tests/eina_js/eina_js_suite.cc b/src/tests/eina_js/eina_js_suite.cc
index 8717c29d69..dd4c91143d 100644
--- a/src/tests/eina_js/eina_js_suite.cc
+++ b/src/tests/eina_js/eina_js_suite.cc
@@ -3,7 +3,7 @@
#include <config.h>
#endif
-#include <v8.h>
+#include V8_INCLUDE_HEADER
#include <cassert>
#include <cstdlib>