summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile_Eolian_Cxx_Helper.am19
-rw-r--r--configure.ac38
-rw-r--r--m4/efl_stdcxx_11.m4133
-rw-r--r--src/lib/Makefile.am282
-rw-r--r--src/tests/Makefile.am34
-rw-r--r--src/tests/elm_cxx_suite.cc117
6 files changed, 619 insertions, 4 deletions
diff --git a/Makefile_Eolian_Cxx_Helper.am b/Makefile_Eolian_Cxx_Helper.am
new file mode 100644
index 000000000..12ac58e17
--- /dev/null
+++ b/Makefile_Eolian_Cxx_Helper.am
@@ -0,0 +1,19 @@
+
+if HAVE_EOLIAN_CXX
+EOLIAN_CXX = @eolian_cxx@
+_EOLIAN_CXX_DEP = @eolian_cxx@
+else
+EOLIAN_CXX = EFL_RUN_IN_TREE=1 $(top_builddir)/src/bin/eolian_cxx/eolian_cxx${EXEEXT}
+_EOLIAN_CXX_DEP = bin/eolian_cxx/eolian_cxx${EXEEXT}
+endif
+
+AM_V_EOLCXX = $(am__v_EOLCXX_@AM_V@)
+am__v_EOLCXX_ = $(am__v_EOLCXX_@AM_DEFAULT_V@)
+am__v_EOLCXX_0 = @echo " EOLCXX " $@;
+
+SUFFIXES += .eo.hh
+
+%.eo.hh: %.eo $(_EOLIAN_CXX_DEP)
+ $(AM_V_EOLCXX)$(EOLIAN_CXX) $(EOLIAN_FLAGS) -o $@ $<
+
+CLEANFILES += $(BUILT_SOURCES)
diff --git a/configure.ac b/configure.ac
index a3948e7f5..a2553e276 100644
--- a/configure.ac
+++ b/configure.ac
@@ -112,6 +112,7 @@ AC_PROG_CC_STDC
AC_HEADER_STDC
AC_C_CONST
AC_FUNC_ALLOCA
+AC_PROG_CXX
ELM_VERSION_MAJOR="v_maj"
ELM_VERSION_MINOR="v_min"
@@ -224,6 +225,33 @@ requirement_elm="\
eio >= efl_version \
"
+EFL_CXX_COMPILE_STDCXX_11([ext])
+want_cxx11="yes"
+AC_ARG_ENABLE([c++11],
+ [AC_HELP_STRING([--disable-c++11],
+ [disable C++11 bindings. @<:@default=enabled@:>@])],
+ [want_cxx11="${enableval}"])
+
+if test "x${HAVE_CXX11}" = "x1" -a "x${want_cxx11}" = "xyes"; then
+ PKG_CHECK_MODULES([ELEMENTARY_CXX],
+ [
+ eo-cxx >= efl_version
+ eina-cxx >= efl_version
+ evas-cxx >= efl_version
+ ],
+ [
+ requirement_elm="${requirement_elm} \
+ eo-cxx >= efl_version \
+ eina-cxx >= efl_version \
+ evas-cxx >= efl_version \
+ "
+ have_cxx11="yes"
+ ],
+ [have_cxx11="no"]
+ )
+fi
+AM_CONDITIONAL([HAVE_CXX11], [test "x${have_cxx11}" = "xyes"])
+
have_elementary_x="no"
want_elementary_x="auto"
AC_ARG_ENABLE([ecore-x],
@@ -527,7 +555,7 @@ if test "x$want_elementary_web" != "xnone"; then
"$webkit_datadir",
"WebKit's data dir")
ELM_WEB2_DEF="#define"
-
+o
elementary_web=$want_elementary_web
requirement_elm="${want_elementary_web} ${requirement_elm}"
],
@@ -590,13 +618,16 @@ my_libs="-lm"
AC_SUBST(my_libs)
AC_SUBST(requirement_elm)
+
EFL_WITH_BIN([eet], [eet-eet], [eet])
EFL_WITH_BIN([edje], [edje-cc], [edje_cc])
EFL_WITH_BIN([elementary], [elementary-codegen], [elementary_codegen])
EFL_WITH_BIN([elementary], [elm-prefs-cc], [elm_prefs_cc])
EFL_WITH_BIN([eolian], [eolian-gen], [eolian_gen])
-# Force the helper to try external eolian-gen
+EFL_WITH_BIN([eolian-cxx], [eolian-cxx], [eolian_cxx])
+# Force the helper to try external eolian generators
AM_CONDITIONAL(HAVE_EOLIAN_GEN, [true])
+AM_CONDITIONAL(HAVE_EOLIAN_CXX, [true])
EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
@@ -725,6 +756,7 @@ echo " edje_cc..................: ${edje_cc}"
echo " elementary_codegen.......: ${elementary_codegen}"
echo " elm_prefs_cc.............: ${elm_prefs_cc}"
echo " eolian_gen...............: ${eolian_gen}"
+echo " eolian_cxx...............: ${eolian_cxx}"
echo
echo " Build elementary_test....: ${have_elementary_test}"
echo " Build elementary_codegen.: ${have_elementary_codegen}"
@@ -733,10 +765,12 @@ echo " Examples.................: ${enable_build_examples}"
echo " Examples installed.......: ${enable_install_examples}"
echo " Build elementary_config..: ${have_elementary_config}"
echo " Enable debug.............: ${want_elementary_debug}"
+echo " Enable C++...............: ${have_cxx11}"
echo
echo "Compilation................: make (or gmake)"
echo " CPPFLAGS.................: $CPPFLAGS"
echo " CFLAGS...................: $CFLAGS"
+echo " CXXFLAGS.................: $CXXFLAGS"
echo " LDFLAGS..................: $LDFLAGS"
echo
if test "${build_tests}" = "none"; then
diff --git a/m4/efl_stdcxx_11.m4 b/m4/efl_stdcxx_11.m4
new file mode 100644
index 000000000..cdd3934c5
--- /dev/null
+++ b/m4/efl_stdcxx_11.m4
@@ -0,0 +1,133 @@
+# ============================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
+# ============================================================================
+#
+# SYNOPSIS
+#
+# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
+#
+# DESCRIPTION
+#
+# Check for baseline language coverage in the compiler for the C++11
+# standard; if necessary, add switches to CXXFLAGS to enable support.
+#
+# The first argument, if specified, indicates whether you insist on an
+# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
+# -std=c++11). If neither is specified, you get whatever works, with
+# preference for an extended mode.
+#
+# The second argument, if specified 'mandatory' or if left unspecified,
+# indicates that baseline C++11 support is required and that the macro
+# should error out if no mode with that support is found. If specified
+# 'optional', then configuration proceeds regardless, after defining
+# HAVE_CXX11 if and only if a supporting mode is found.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
+# Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
+# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 3
+
+m4_define([_EFL_CXX_COMPILE_STDCXX_11_testbody], [
+ template <typename T>
+ struct check
+ {
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ };
+
+ typedef check<check<bool>> right_angle_brackets;
+
+ int a;
+ decltype(a) b;
+
+ typedef check<int> check_type;
+ check_type c;
+ check_type&& cr = static_cast<check_type&&>(c);
+
+ auto d = a;
+])
+
+AC_DEFUN([EFL_CXX_COMPILE_STDCXX_11], [dnl
+ m4_if([$1], [], [],
+ [$1], [ext], [],
+ [$1], [noext], [],
+ [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
+ m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
+ [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
+ [$2], [optional], [ax_cxx_compile_cxx11_required=false],
+ [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl
+ AC_LANG_PUSH([C++])dnl
+ ac_success=no
+ AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
+ ax_cv_cxx_compile_cxx11,
+ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_EFL_CXX_COMPILE_STDCXX_11_testbody])],
+ [ax_cv_cxx_compile_cxx11=yes],
+ [ax_cv_cxx_compile_cxx11=no])])
+ if test x$ax_cv_cxx_compile_cxx11 = xyes; then
+ ac_success=yes
+ fi
+
+ m4_if([$1], [noext], [], [dnl
+ if test x$ac_success = xno; then
+ for switch in -std=gnu++11; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+ $cachevar,
+ [ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_EFL_CXX_COMPILE_STDCXX_11_testbody])],
+ [eval $cachevar=yes],
+ [eval $cachevar=no])
+ CXXFLAGS="$ac_save_CXXFLAGS"])
+ if eval test x\$$cachevar = xyes; then
+ CXXFLAGS="$CXXFLAGS $switch"
+ ac_success=yes
+ break
+ fi
+ done
+ fi])
+
+ m4_if([$1], [ext], [], [dnl
+ if test x$ac_success = xno; then
+ for switch in -std=c++11; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+ $cachevar,
+ [ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_EFL_CXX_COMPILE_STDCXX_11_testbody])],
+ [eval $cachevar=yes],
+ [eval $cachevar=no])
+ CXXFLAGS="$ac_save_CXXFLAGS"])
+ if eval test x\$$cachevar = xyes; then
+ CXXFLAGS="$CXXFLAGS $switch"
+ ac_success=yes
+ break
+ fi
+ done
+ fi])
+ AC_LANG_POP([C++])
+ if test x$ax_cxx_compile_cxx11_required = xtrue; then
+ if test x$ac_success = xno; then
+ AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+ fi
+ else
+ if test x$ac_success = xno; then
+ HAVE_CXX11=0
+ AC_MSG_NOTICE([No compiler with C++11 support was found])
+ else
+ HAVE_CXX11=1
+ AC_DEFINE(HAVE_CXX11,1,
+ [define if the compiler supports basic C++11 syntax])
+ fi
+
+ AC_SUBST(HAVE_CXX11)
+ fi
+])
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 887dfe82d..f535b9369 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -7,6 +7,7 @@ EOLIAN_FLAGS = @DEPS_EOLIAN_FLAGS@ \
-I$(top_srcdir)/src/lib
include $(top_srcdir)/Makefile_Eolian_Helper.am
+include $(top_srcdir)/Makefile_Eolian_Cxx_Helper.am
AM_CPPFLAGS = \
-DELM_INTERNAL_API_ARGESFSDFEFC=1 \
@@ -533,6 +534,95 @@ elm_factory.h \
elm_factory.c \
elm_intro.h.in
+elm_eolian_sources = \
+elm_widget.eo \
+elm_container.eo \
+elm_layout.eo \
+elm_interface_scrollable.eo \
+elm_pan.eo \
+elm_frame.eo \
+elm_hover.eo \
+elm_access.eo \
+elm_actionslider.eo \
+elm_app_client.eo \
+elm_app_client_view.eo \
+elm_app_server.eo \
+elm_app_server_view.eo \
+elm_atspi_app_object.eo \
+elm_interface_atspi_accessible.eo \
+elm_interface_atspi_action.eo \
+elm_interface_atspi_component.eo \
+elm_interface_atspi_value.eo \
+elm_interface_atspi_widget.eo \
+elm_interface_atspi_widget_action.eo \
+elm_interface_atspi_window.eo \
+elm_bg.eo \
+elm_box.eo \
+elm_bubble.eo \
+elm_button.eo \
+elm_calendar.eo \
+elm_check.eo \
+elm_clock.eo \
+elm_colorselector.eo \
+elm_conformant.eo \
+elc_ctxpopup.eo \
+elm_datetime.eo \
+elm_dayselector.eo \
+elm_diskselector.eo \
+elm_entry.eo \
+elc_fileselector.eo \
+elc_fileselector_button.eo \
+elc_fileselector_entry.eo \
+elm_flipselector.eo \
+elm_flip.eo \
+elm_gengrid.eo \
+elm_gengrid_pan.eo \
+elm_genlist.eo \
+elm_genlist_pan.eo \
+elm_gesture_layer.eo \
+elm_glview.eo \
+elm_grid.eo \
+elc_hoversel.eo \
+elm_image.eo \
+elm_icon.eo \
+elm_index.eo \
+elm_interface_fileselector.eo \
+elm_inwin.eo \
+elm_label.eo \
+elm_list.eo \
+elm_map_pan.eo \
+elm_map.eo \
+elm_menu.eo \
+elc_multibuttonentry.eo \
+elc_naviframe.eo \
+elm_panel.eo \
+elm_mapbuf.eo \
+elm_notify.eo \
+elm_panes.eo \
+elm_photocam.eo \
+elm_photocam_pan.eo \
+elm_photo.eo \
+elc_player.eo \
+elm_plug.eo \
+elc_popup.eo \
+elm_prefs.eo \
+elm_progressbar.eo \
+elm_radio.eo \
+elm_route.eo \
+elm_scroller.eo \
+elm_segment_control.eo \
+elm_separator.eo \
+elm_slider.eo \
+elm_slideshow.eo \
+elm_spinner.eo \
+elm_systray.eo \
+elm_table.eo \
+elm_thumb.eo \
+elm_toolbar.eo \
+elm_video.eo \
+elm_web.eo \
+elm_win.eo
+
BUILT_SOURCES = \
elm_widget.eo.c \
elm_widget.eo.h \
@@ -874,8 +964,195 @@ elementaryeolianfiles_DATA = \
elm_web.eo \
elm_win.eo
-EXTRA_DIST += \
- ${elementaryeolianfiles_DATA}
+if HAVE_CXX11
+BUILT_SOURCES += \
+ elm_widget.eo.hh \
+ elm_container.eo.hh \
+ elm_layout.eo.hh \
+ elm_interface_scrollable.eo.hh \
+ elm_pan.eo.hh \
+ elm_frame.eo.hh \
+ elm_hover.eo.hh \
+ elm_access.eo.hh \
+ elm_actionslider.eo.hh \
+ elm_app_client.eo.hh \
+ elm_app_client_view.eo.hh \
+ elm_app_server.eo.hh \
+ elm_app_server_view.eo.hh \
+ elm_atspi_app_object.eo.hh \
+ elm_interface_atspi_accessible.eo.hh \
+ elm_interface_atspi_action.eo.hh \
+ elm_interface_atspi_component.eo.hh \
+ elm_interface_atspi_editable_text.eo.hh \
+ elm_interface_atspi_image.eo.hh \
+ elm_interface_atspi_selection.eo.hh \
+ elm_interface_atspi_text.eo.hh \
+ elm_interface_atspi_value.eo.hh \
+ elm_interface_atspi_widget.eo.hh \
+ elm_interface_atspi_widget_action.eo.hh \
+ elm_interface_atspi_window.eo.hh \
+ elm_bg.eo.hh \
+ elm_box.eo.hh \
+ elm_bubble.eo.hh \
+ elm_button.eo.hh \
+ elm_calendar.eo.hh \
+ elm_check.eo.hh \
+ elm_clock.eo.hh \
+ elm_colorselector.eo.hh \
+ elm_conformant.eo.hh \
+ elc_ctxpopup.eo.hh \
+ elm_datetime.eo.hh \
+ elm_dayselector.eo.hh \
+ elm_diskselector.eo.hh \
+ elm_entry.eo.hh \
+ elc_fileselector.eo.hh \
+ elc_fileselector_button.eo.hh \
+ elc_fileselector_entry.eo.hh \
+ elm_flipselector.eo.hh \
+ elm_flip.eo.hh \
+ elm_gengrid.eo.hh \
+ elm_gengrid_pan.eo.hh \
+ elm_genlist.eo.hh \
+ elm_genlist_pan.eo.hh \
+ elm_gesture_layer.eo.hh \
+ elm_glview.eo.hh \
+ elm_grid.eo.hh \
+ elc_hoversel.eo.hh \
+ elm_image.eo.hh \
+ elm_icon.eo.hh \
+ elm_index.eo.hh \
+ elm_interface_fileselector.eo.hh \
+ elm_inwin.eo.hh \
+ elm_label.eo.hh \
+ elm_list.eo.hh \
+ elm_map_pan.eo.hh \
+ elm_map.eo.hh \
+ elm_menu.eo.hh \
+ elc_multibuttonentry.eo.hh \
+ elc_naviframe.eo.hh \
+ elm_panel.eo.hh \
+ elm_mapbuf.eo.hh \
+ elm_notify.eo.hh \
+ elm_panes.eo.hh \
+ elm_photocam.eo.hh \
+ elm_photocam_pan.eo.hh \
+ elm_photo.eo.hh \
+ elc_player.eo.hh \
+ elm_plug.eo.hh \
+ elc_popup.eo.hh \
+ elm_prefs.eo.hh \
+ elm_progressbar.eo.hh \
+ elm_radio.eo.hh \
+ elm_route.eo.hh \
+ elm_scroller.eo.hh \
+ elm_segment_control.eo.hh \
+ elm_separator.eo.hh \
+ elm_slider.eo.hh \
+ elm_slideshow.eo.hh \
+ elm_spinner.eo.hh \
+ elm_systray.eo.hh \
+ elm_table.eo.hh \
+ elm_thumb.eo.hh \
+ elm_toolbar.eo.hh \
+ elm_video.eo.hh \
+ elm_web.eo.hh \
+ elm_win.eo.hh
+
+nodist_includesunstable_HEADERS = \
+ elm_widget.eo.hh \
+ elm_container.eo.hh \
+ elm_layout.eo.hh \
+ elm_interface_scrollable.eo.hh \
+ elm_pan.eo.hh \
+ elm_frame.eo.hh \
+ elm_hover.eo.hh \
+ elm_access.eo.hh \
+ elm_actionslider.eo.hh \
+ elm_app_client.eo.hh \
+ elm_app_client_view.eo.hh \
+ elm_app_server.eo.hh \
+ elm_app_server_view.eo.hh \
+ elm_atspi_app_object.eo.hh \
+ elm_interface_atspi_accessible.eo.hh \
+ elm_interface_atspi_action.eo.hh \
+ elm_interface_atspi_component.eo.hh \
+ elm_interface_atspi_editable_text.eo.hh \
+ elm_interface_atspi_image.eo.hh \
+ elm_interface_atspi_selection.eo.hh \
+ elm_interface_atspi_text.eo.hh \
+ elm_interface_atspi_value.eo.hh \
+ elm_interface_atspi_widget.eo.hh \
+ elm_interface_atspi_widget_action.eo.hh \
+ elm_interface_atspi_window.eo.hh \
+ elm_bg.eo.hh \
+ elm_box.eo.hh \
+ elm_bubble.eo.hh \
+ elm_button.eo.hh \
+ elm_calendar.eo.hh \
+ elm_check.eo.hh \
+ elm_clock.eo.hh \
+ elm_colorselector.eo.hh \
+ elm_conformant.eo.hh \
+ elc_ctxpopup.eo.hh \
+ elm_datetime.eo.hh \
+ elm_dayselector.eo.hh \
+ elm_diskselector.eo.hh \
+ elm_entry.eo.hh \
+ elc_fileselector.eo.hh \
+ elc_fileselector_button.eo.hh \
+ elc_fileselector_entry.eo.hh \
+ elm_flipselector.eo.hh \
+ elm_flip.eo.hh \
+ elm_gengrid.eo.hh \
+ elm_gengrid_pan.eo.hh \
+ elm_genlist.eo.hh \
+ elm_genlist_pan.eo.hh \
+ elm_gesture_layer.eo.hh \
+ elm_glview.eo.hh \
+ elm_grid.eo.hh \
+ elc_hoversel.eo.hh \
+ elm_image.eo.hh \
+ elm_icon.eo.hh \
+ elm_index.eo.hh \
+ elm_interface_fileselector.eo.hh \
+ elm_inwin.eo.hh \
+ elm_label.eo.hh \
+ elm_list.eo.hh \
+ elm_map_pan.eo.hh \
+ elm_map.eo.hh \
+ elm_menu.eo.hh \
+ elc_multibuttonentry.eo.hh \
+ elc_naviframe.eo.hh \
+ elm_panel.eo.hh \
+ elm_mapbuf.eo.hh \
+ elm_notify.eo.hh \
+ elm_panes.eo.hh \
+ elm_photocam.eo.hh \
+ elm_photocam_pan.eo.hh \
+ elm_photo.eo.hh \
+ elc_player.eo.hh \
+ elm_plug.eo.hh \
+ elc_popup.eo.hh \
+ elm_prefs.eo.hh \
+ elm_progressbar.eo.hh \
+ elm_radio.eo.hh \
+ elm_route.eo.hh \
+ elm_scroller.eo.hh \
+ elm_segment_control.eo.hh \
+ elm_separator.eo.hh \
+ elm_slider.eo.hh \
+ elm_slideshow.eo.hh \
+ elm_spinner.eo.hh \
+ elm_systray.eo.hh \
+ elm_table.eo.hh \
+ elm_thumb.eo.hh \
+ elm_toolbar.eo.hh \
+ elm_video.eo.hh \
+ elm_web.eo.hh \
+ elm_win.eo.hh
+endif
+
+EXTRA_DIST += ${elementaryeolianfiles_DATA}
nodist_includesunstable_HEADERS = \
elm_widget.eo.h \
@@ -1032,3 +1309,4 @@ nodist_includesunstable_HEADERS = \
elm_video.eo.legacy.h \
elm_web.eo.legacy.h \
elm_win.eo.legacy.h
+
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 12fc454a5..bc810b482 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -98,3 +98,37 @@ elm_suite_LDADD = \
@ELEMENTARY_LIBS@ \
@ELEMENTARY_WEB_LIBS@ \
@my_libs@
+
+if HAVE_CXX11
+TESTS += elm_cxx_suite
+check_PROGRAMS = elm_cxx_suite
+
+elm_cxx_suite_SOURCES = elm_cxx_suite.cc
+elm_cxx_suite_CPPFLAGS = \
+ -DTESTS_BUILD_DIR=\"${top_builddir}/src/tests\" \
+ -I$(top_srcdir)/src/lib \
+ -I$(top_builddir)/src/lib \
+ @CHECK_CFLAGS@ \
+ @ELEMENTARY_CFLAGS@ \
+ @ELEMENTARY_X_CFLAGS@ \
+ @ELEMENTARY_CXX_CFLAGS@ \
+ @ELEMENTARY_FB_CFLAGS@ \
+ @ELEMENTARY_SDL_CFLAGS@ \
+ @ELEMENTARY_WIN32_CFLAGS@ \
+ @ELEMENTARY_ELOCATION_CFLAGS@ \
+ @ELEMENTARY_EWEATHER_CFLAGS@ \
+ @ELEMENTARY_WEB_CFLAGS@ \
+ @ELEMENTARY_EMAP_CFLAGS@ \
+ @ELEMENTARY_WAYLAND_CFLAGS@ \
+ @EVIL_CFLAGS@
+
+elm_cxx_suite_LDADD = \
+ $(top_builddir)/src/lib/libelementary.la \
+ @CHECK_LIBS@ \
+ @ELEMENTARY_EWEATHER_LIBS@ \
+ @ELEMENTARY_ELOCATION_LIBS@ \
+ @ELEMENTARY_EMAP_LIBS@ \
+ @ELEMENTARY_LIBS@ \
+ @ELEMENTARY_WEB_LIBS@ \
+ @my_libs@
+endif
diff --git a/src/tests/elm_cxx_suite.cc b/src/tests/elm_cxx_suite.cc
new file mode 100644
index 000000000..6af675dab
--- /dev/null
+++ b/src/tests/elm_cxx_suite.cc
@@ -0,0 +1,117 @@
+
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define ELM_INTERNAL_API_ARGESFSDFEFC
+#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
+#define ELM_INTERFACE_ATSPI_ACTION_PROTECTED
+#define ELM_INTERFACE_ATSPI_VALUE_PROTECTED
+#define ELM_INTERFACE_ATSPI_EDITABLE_TEXT_PROTECTED
+#define ELM_INTERFACE_ATSPI_TEXT_PROTECTED
+#define ELM_INTERFACE_ATSPI_SELECTION_PROTECTED
+#define ELM_INTERFACE_ATSPI_IMAGE_PROTECTED
+#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
+
+#include <Eo.h>
+#include <Evas.h>
+#include <Elementary.h>
+#include <elm_widget.h>
+#include <elm_interface_atspi_accessible.h>
+
+#include <elc_ctxpopup.eo.hh>
+#include <elc_fileselector_button.eo.hh>
+#include <elc_fileselector_entry.eo.hh>
+#include <elc_fileselector.eo.hh>
+#include <elc_hoversel.eo.hh>
+#include <elc_multibuttonentry.eo.hh>
+#include <elc_naviframe.eo.hh>
+#include <elc_player.eo.hh>
+#include <elc_popup.eo.hh>
+#include <elm_access.eo.hh>
+#include <elm_actionslider.eo.hh>
+#include <elm_app_client.eo.hh>
+#include <elm_app_client_view.eo.hh>
+#include <elm_app_server.eo.hh>
+#include <elm_app_server_view.eo.hh>
+#include <elm_atspi_app_object.eo.hh>
+#include <elm_bg.eo.hh>
+#include <elm_box.eo.hh>
+#include <elm_bubble.eo.hh>
+#include <elm_button.eo.hh>
+#include <elm_calendar.eo.hh>
+#include <elm_check.eo.hh>
+#include <elm_clock.eo.hh>
+#include <elm_colorselector.eo.hh>
+#include <elm_conformant.eo.hh>
+#include <elm_container.eo.hh>
+#include <elm_datetime.eo.hh>
+#include <elm_dayselector.eo.hh>
+#include <elm_diskselector.eo.hh>
+#include <elm_entry.eo.hh>
+#include <elm_flip.eo.hh>
+#include <elm_flipselector.eo.hh>
+#include <elm_frame.eo.hh>
+#include <elm_gengrid.eo.hh>
+#include <elm_gengrid_pan.eo.hh>
+#include <elm_genlist.eo.hh>
+#include <elm_genlist_pan.eo.hh>
+#include <elm_gesture_layer.eo.hh>
+#include <elm_glview.eo.hh>
+#include <elm_grid.eo.hh>
+#include <elm_hover.eo.hh>
+#include <elm_icon.eo.hh>
+#include <elm_image.eo.hh>
+#include <elm_index.eo.hh>
+#include <elm_interface_atspi_accessible.eo.hh>
+#include <elm_interface_atspi_action.eo.hh>
+#include <elm_interface_atspi_component.eo.hh>
+#include <elm_interface_atspi_editable_text.eo.hh>
+#include <elm_interface_atspi_image.eo.hh>
+#include <elm_interface_atspi_selection.eo.hh>
+#include <elm_interface_atspi_text.eo.hh>
+#include <elm_interface_atspi_value.eo.hh>
+#include <elm_interface_atspi_widget_action.eo.hh>
+#include <elm_interface_atspi_widget.eo.hh>
+#include <elm_interface_atspi_window.eo.hh>
+#include <elm_interface_fileselector.eo.hh>
+#include <elm_interface_scrollable.eo.hh>
+#include <elm_inwin.eo.hh>
+#include <elm_label.eo.hh>
+#include <elm_layout.eo.hh>
+#include <elm_list.eo.hh>
+#include <elm_mapbuf.eo.hh>
+#include <elm_map.eo.hh>
+#include <elm_map_pan.eo.hh>
+#include <elm_menu.eo.hh>
+#include <elm_notify.eo.hh>
+#include <elm_panel.eo.hh>
+#include <elm_pan.eo.hh>
+#include <elm_panes.eo.hh>
+#include <elm_photocam.eo.hh>
+#include <elm_photocam_pan.eo.hh>
+#include <elm_photo.eo.hh>
+#include <elm_plug.eo.hh>
+#include <elm_prefs.eo.hh>
+#include <elm_progressbar.eo.hh>
+#include <elm_radio.eo.hh>
+#include <elm_route.eo.hh>
+#include <elm_scroller.eo.hh>
+#include <elm_segment_control.eo.hh>
+#include <elm_separator.eo.hh>
+#include <elm_slider.eo.hh>
+#include <elm_slideshow.eo.hh>
+#include <elm_spinner.eo.hh>
+#include <elm_systray.eo.hh>
+#include <elm_table.eo.hh>
+#include <elm_thumb.eo.hh>
+#include <elm_toolbar.eo.hh>
+#include <elm_video.eo.hh>
+#include <elm_web.eo.hh>
+#include <elm_widget.eo.hh>
+#include <elm_win.eo.hh>
+
+int main()
+{
+}