pkgconfig_DATA += pc/elput.pc
endif
+if HAVE_ECORE_DRM2
+pkgconfig_DATA += pc/ecore-drm2.pc
+endif
+
# Cmake configs:
efl_cmakeconfigdir = $(libdir)/cmake/Efl/
efl_cmakeconfig_DATA = \
fi
AC_SUBST(cocoa_coreservices_ldflags)
+AC_ARG_ENABLE([elput],
+ [AS_HELP_STRING([--enable-elput],[enable elput library. @<:@default=disabled@:>@])],
+ [
+ if test "x${enableval}" = "xyes" ; then
+ want_elput="yes"
+ else
+ want_elput="no"
+ fi
+ ],
+ [want_elput="no"])
+
# Drm
AC_ARG_ENABLE([drm],
[AS_HELP_STRING([--enable-drm],[enable drm engine. @<:@default=disabled@:>@])],
[
if test "x${enableval}" = "xyes" ; then
- want_drm="yes"
+ if test "x${want_elput}" != "xyes" ; then
+ AC_MSG_ERROR([elput is required to build drm support])
+ fi
+ want_drm="yes"
else
want_drm="no"
fi
],
[want_drm="no"])
-
AC_ARG_ENABLE([gl-drm],
[AC_HELP_STRING([--enable-gl-drm],
[enable gl drm engine. @<:@default=disabled@:>@])],
],
[want_ecore_buffer="no"])
-AC_ARG_ENABLE([elput],
- [AS_HELP_STRING([--enable-elput],[enable elput library. @<:@default=disabled@:>@])],
- [
- if test "x${enableval}" = "xyes" ; then
- want_elput="yes"
- else
- want_elput="no"
- fi
- ],
- [want_elput="no"])
-
# Image Loaders
ARG_ENABLE_EVAS_IMAGE_LOADER(BMP, static)
### Checks for library functions
EFL_LIB_END_OPTIONAL([Elput])
-#### End of Ecore_Drm
+#### End of Elput
+
+#### Ecore_Drm2
+have_libinput_new="no"
+EFL_LIB_START_OPTIONAL([Ecore_Drm2], [test "${want_drm}" = "yes"])
+
+### Additional options to configure
+SUID_CFLAGS=-fPIE
+SUID_LDFLAGS=-pie
+AC_SUBST([SUID_CFLAGS])
+AC_SUBST([SUID_LDFLAGS])
+
+### Default values
+
+### Checks for programs
+
+### Checks for libraries
+EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [eo])
+EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [efl])
+EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [eina])
+EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [ecore])
+EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [elput])
+EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [eeze])
+
+EFL_DEPEND_PKG([ECORE_DRM2], [DRM], [libdrm >= 2.4 gbm])
+
+EFL_ADD_LIBS([ECORE_DRM2], [-lm])
+
+AC_CHECK_LIB(drm, drmModeAtomicCommit, AC_DEFINE(HAVE_ATOMIC_DRM, [], [Atomic modeset supported]))
+
+EFL_EVAL_PKGS([ECORE_DRM2])
+
+### Checks for header files
+
+### Checks for types
+
+### Checks for structures
+
+### Checks for compiler characteristics
+
+### Checks for linker characteristics
+
+### Checks for library functions
+
+EFL_LIB_END_OPTIONAL([Ecore_Drm2])
+#### End of Ecore_Drm2
#### Ecore_Audio
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_sdl}], [ecore_sdl])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_ecore_evas_gl_cocoa}], [ecore_cocoa])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${build_ecore_evas_win32}], [ecore_win32])
-EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_drm}], [ecore_drm])
+EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_drm}], [ecore_drm2])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${build_ecore_evas_wayland}], [ecore_wl2])
dnl Special case deps for ecore_drm
pc/elementary.pc
pc/elementary-cxx.pc
pc/elput.pc
+pc/ecore-drm2.pc
dbus-services/org.enlightenment.Ethumb.service
systemd-services/ethumb.service
$po_makefile_in
ecore_win32)
depname="ecore-win32"
;;
+ ecore_drm2)
+ depname="ecore-drm2"
+ ;;
esac
requirements_pc_[]m4_defn([DOWNEFL])="${depname} >= ${PACKAGE_VERSION} ${requirements_pc_[][]m4_defn([DOWNEFL])}"
requirements_cflags_[]m4_defn([DOWNEFL])="-I\$(top_srcdir)/src/lib/${libdirname} -I\$(top_builddir)/src/lib/${libdirname} ${requirements_cflags_[][]m4_defn([DOWNEFL])}"
/efl-js.pc
/elementary-cxx.pc
/elput.pc
+/ecore-drm2.pc
--- /dev/null
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: ecore-drm2
+Description: E core library, DRM module
+Requires.private: @requirements_pc_ecore_drm2@
+Version: @VERSION@
+Libs: -L${libdir} -lecore_drm2
+Libs.private: @requirements_libs_ecore_drm2@
+Cflags: -I${includedir}/efl-@VMAJ@ -I${includedir}/ecore-drm2-@VMAJ@
include Makefile_Ecore_IMF_Evas.am
include Makefile_Eldbus.am
include Makefile_Eeze.am
+include Makefile_Elput.am
include Makefile_Ecore_Drm.am
+include Makefile_Ecore_Drm2.am
include Makefile_Ecore_Evas.am
include Makefile_Ecore_Audio.am
include Makefile_Ecore_Avahi.am
include Makefile_Ethumb_Client.am
include Makefile_Elocation.am
include Makefile_Elementary.am
-include Makefile_Elput.am
include Makefile_Cxx.am
include Makefile_Eolian_Cxx.am
--- /dev/null
+if HAVE_ECORE_DRM2
+
+### Library
+
+lib_LTLIBRARIES += lib/ecore_drm2/libecore_drm2.la
+
+installed_ecoredrm2mainheadersdir = $(includedir)/ecore-drm2-@VMAJ@
+dist_installed_ecoredrm2mainheaders_DATA = \
+ lib/ecore_drm2/Ecore_Drm2.h
+
+lib_ecore_drm2_libecore_drm2_la_SOURCES = \
+lib/ecore_drm2/ecore_drm2.c \
+lib/ecore_drm2/ecore_drm2_private.h
+
+lib_ecore_drm2_libecore_drm2_la_CPPFLAGS = \
+ -I$(top_builddir)/src/lib/efl \
+ @ECORE_DRM2_CFLAGS@ @EFL_CFLAGS@ \
+ -DPACKAGE_LIB_DIR=\"$(libdir)\" \
+ -DMODULE_ARCH=\"$(MODULE_ARCH)\"
+
+lib_ecore_drm2_libecore_drm2_la_LIBADD = @ECORE_DRM2_LIBS@
+lib_ecore_drm2_libecore_drm2_la_DEPENDENCIES = @ECORE_DRM2_INTERNAL_LIBS@
+lib_ecore_drm2_libecore_drm2_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
+
+endif
@ECORE_EVAS_CFLAGS@ \
@ECORE_DRM_CFLAGS@ \
-I$(top_srcdir)/src/modules/evas/engines/drm \
--I$(top_srcdir)/src/modules/evas/engines/gl_drm \
-@ecore_evas_engines_gl_drm_cflags@
-modules_ecore_evas_engines_drm_module_la_LIBADD = @USE_ECORE_EVAS_LIBS@ \
-@ecore_evas_engines_gl_drm_libs@
-modules_ecore_evas_engines_drm_module_la_DEPENDENCIES = @USE_ECORE_EVAS_INTERNAL_LIBS@
+-I$(top_srcdir)/src/modules/evas/engines/gl_drm
+modules_ecore_evas_engines_drm_module_la_LIBADD = \
+@USE_ECORE_EVAS_LIBS@ \
+@USE_ECORE_DRM2_LIBS@
+modules_ecore_evas_engines_drm_module_la_DEPENDENCIES = \
+@USE_ECORE_EVAS_INTERNAL_LIBS@ \
+@USE_ECORE_DRM2_INTERNAL_LIBS@
modules_ecore_evas_engines_drm_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@
modules_ecore_evas_engines_drm_module_la_LIBTOOLFLAGS = --tag=disable-static
endif
--- /dev/null
+#ifndef _ECORE_DRM2_H
+# define _ECORE_DRM2_H
+
+# include <Ecore.h>
+# include <Elput.h>
+
+# ifdef EAPI
+# undef EAPI
+# endif
+
+# ifdef _MSC_VER
+# ifdef BUILDING_DLL
+# define EAPI __declspec(dllexport)
+# else // ifdef BUILDING_DLL
+# define EAPI __declspec(dllimport)
+# endif // ifdef BUILDING_DLL
+# else // ifdef _MSC_VER
+# ifdef __GNUC__
+# if __GNUC__ >= 4
+# define EAPI __attribute__ ((visibility("default")))
+# else // if __GNUC__ >= 4
+# define EAPI
+# endif // if __GNUC__ >= 4
+# else // ifdef __GNUC__
+# define EAPI
+# endif // ifdef __GNUC__
+# endif // ifdef _MSC_VER
+
+# ifdef EFL_BETA_API_SUPPORT
+
+/**
+ * @file
+ * @brief Ecore functions for dealing with drm, virtual terminals
+ *
+ * @defgroup Ecore_Drm2_Group Ecore_Drm2 - Drm Integration
+ * @ingroup Ecore
+ *
+ * Ecore_Drm2 provides a wrapper and functions for using libdrm
+ *
+ * @li @ref Ecore_Drm2_Init_Group
+ * @li @ref Ecore_Drm2_Device_Group
+ */
+
+/**
+ * @defgroup Ecore_Drm2_Init_Group Drm library Init and Shutdown functions
+ *
+ * Functions that start and shutdown the Ecore_Drm2 library
+ */
+
+/**
+ * Initialize the Ecore_Drm2 library
+ *
+ * @return The number of times the library has been initialized without
+ * being shut down. 0 is returned if an error occurs.
+ *
+ * @ingroup Ecore_Drm2_Init_Group
+ * @since 1.18
+ */
+EAPI int ecore_drm2_init(void);
+
+/**
+ * Shutdown the Ecore_Drm2 library
+ *
+ * @return The number of times the library has been initialized without
+ * being shutdown. 0 is returned if an error occurs.
+ *
+ * @ingroup Ecore_Drm2_Init_Group
+ * @since 1.18
+ */
+EAPI int ecore_drm2_shutdown(void);
+
+# endif
+
+#endif
--- /dev/null
+#include "ecore_drm2_private.h"
+
+static int _ecore_drm2_init_count = 0;
+
+int _ecore_drm2_log_dom = -1;
+
+EAPI int
+ecore_drm2_init(void)
+{
+ if (++_ecore_drm2_init_count != 1) return _ecore_drm2_init_count;
+
+ if (!eina_init()) goto eina_err;
+
+ if (!ecore_init())
+ {
+ EINA_LOG_ERR("Could not initialize Ecore library");
+ goto ecore_err;
+ }
+
+ if (!eeze_init())
+ {
+ EINA_LOG_ERR("Could not initialize Eeze library");
+ goto eeze_err;
+ }
+
+ if (!elput_init())
+ {
+ EINA_LOG_ERR("Could not initialize Elput library");
+ goto elput_err;
+ }
+
+ _ecore_drm2_log_dom =
+ eina_log_domain_register("ecore_drm2", ECORE_DRM2_DEFAULT_LOG_COLOR);
+ if (!_ecore_drm2_log_dom)
+ {
+ EINA_LOG_ERR("Could not create logging domain for Ecore_Drm2");
+ goto log_err;
+ }
+
+ return _ecore_drm2_init_count;
+
+log_err:
+ elput_shutdown();
+elput_err:
+ eeze_shutdown();
+eeze_err:
+ ecore_shutdown();
+ecore_err:
+ eina_shutdown();
+eina_err:
+ return --_ecore_drm2_init_count;
+}
+
+EAPI int
+ecore_drm2_shutdown(void)
+{
+ if (_ecore_drm2_init_count < 1)
+ {
+ ERR("Ecore_Drm2 shutdown called without init");
+ return 0;
+ }
+
+ if (--_ecore_drm2_init_count != 0) return _ecore_drm2_init_count;
+
+ eina_log_domain_unregister(_ecore_drm2_log_dom);
+ _ecore_drm2_log_dom = -1;
+
+ elput_shutdown();
+ eeze_shutdown();
+ ecore_shutdown();
+ eina_shutdown();
+
+ return _ecore_drm2_init_count;
+}
--- /dev/null
+#ifndef _ECORE_DRM2_PRIVATE_H
+# define _ECORE_DRM2_PRIVATE_H
+
+# ifdef HAVE_CONFIG_H
+# include "config.h"
+# endif
+
+# include "Ecore.h"
+# include "ecore_private.h"
+# include "Eeze.h"
+# include "Elput.h"
+# include <Ecore_Drm2.h>
+
+# include <unistd.h>
+# include <strings.h>
+# include <sys/mman.h>
+# include <fcntl.h>
+# include <ctype.h>
+
+# include <sys/ioctl.h>
+# include <xf86drm.h>
+# include <xf86drmMode.h>
+# include <drm_mode.h>
+# include <drm_fourcc.h>
+
+extern int _ecore_drm2_log_dom;
+
+# ifdef ECORE_DRM2_DEFAULT_LOG_COLOR
+# undef ECORE_DRM2_DEFAULT_LOG_COLOR
+# endif
+# define ECORE_DRM2_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
+
+# ifdef ERR
+# undef ERR
+# endif
+# define ERR(...) EINA_LOG_DOM_ERR(_ecore_drm2_log_dom, __VA_ARGS__)
+
+# ifdef DBG
+# undef DBG
+# endif
+# define DBG(...) EINA_LOG_DOM_DBG(_ecore_drm2_log_dom, __VA_ARGS__)
+
+# ifdef INF
+# undef INF
+# endif
+# define INF(...) EINA_LOG_DOM_INFO(_ecore_drm2_log_dom, __VA_ARGS__)
+
+# ifdef WRN
+# undef WRN
+# endif
+# define WRN(...) EINA_LOG_DOM_WARN(_ecore_drm2_log_dom, __VA_ARGS__)
+
+# ifdef CRIT
+# undef CRIT
+# endif
+# define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_drm2_log_dom, __VA_ARGS__)
+
+#endif