forked from openkylin/efl
542 lines
14 KiB
Plaintext
542 lines
14 KiB
Plaintext
EFL
|
|
===
|
|
|
|
******************************************************************************
|
|
FOR ANY ISSUES PLEASE EMAIL:
|
|
enlightenment-devel@lists.sourceforge.net
|
|
******************************************************************************
|
|
|
|
EFL is a collection of libraries for handling many common tasks a
|
|
developer may have such as data structures, communication, rendering,
|
|
widgets and more.
|
|
|
|
There are many components inside EFL. They also build various things
|
|
like shared libraries, loadable plug-in modules and also binary
|
|
executables. Different elements will end up being licensed differently
|
|
too. Below is a rundown of the components, what they do and their
|
|
licensing.
|
|
|
|
All library source is in the src/lib/ directory. All binaries are in
|
|
src/bin/. All loadable modules are in src/modules/. All data files are
|
|
in the data/ directory. Licensing details are listed in COPYING and
|
|
the licenses/ directory. The pc/ directory holds all the Package
|
|
Config files installed to help developers build against EFL.
|
|
|
|
For more documentation please see:
|
|
|
|
https://www.enlightenment.org/docs
|
|
|
|
PLATFORMS
|
|
---------
|
|
|
|
EFL is primarily developerd on Linux (GNU/Linux) and should work on
|
|
most distributions as long as dependencies are provided. It has been
|
|
compiled and run also on Windows (using MINGW32 - please see
|
|
http://www.winbuilds.org ), Mac OS X, FreeBSD and NetBSD.
|
|
|
|
COMPONENTS
|
|
----------
|
|
|
|
**Ecore:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is the core main-loop, system events and execution layer. This
|
|
handles running the main loop, integrating with external data and
|
|
timing sources (the system clock, file descriptors, system signals),
|
|
and producing an event queue, walking that queue and dispatching
|
|
events to appropriate callbacks.
|
|
|
|
|
|
|
|
**Ecore Audio:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library provides an API for audio playback and recording. It uses
|
|
pulse audio underneath to handle mixing and policies. The API for this
|
|
should not be considered stable right now because it relies on EO and
|
|
EO is not considered finalized yet.
|
|
|
|
|
|
|
|
**Ecore Cocoa:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This provides wrappers/abstractions around Max OS-X Cocoa APIs to help
|
|
Mac porting.
|
|
|
|
|
|
|
|
**Ecore Con:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This provides a completely event-based TCP/UDP and Unix domain socket
|
|
API that integrates with the main-loop. This means no blocking to send
|
|
or receive data, supporting "infinite send buffers" with storage and
|
|
spooling being done by Ecore Con. It also supports SSL encryption
|
|
transparently turned on or not on the same connection, certificate
|
|
verification, CURL wrapping for HTTP connection usage (GETs, POSTs
|
|
etc.), asynchronous DNS lookups and provides the ability to also be a
|
|
server, not just a client, with the same event-based API.
|
|
|
|
|
|
|
|
**Ecore Evas:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This acts as glue between the display target (X11, Wayland,
|
|
Frame buffer, Cocoa on OSX, Win32 etc.) and Evas. It creates/provides a
|
|
target for Evas to render to (a Window or Surface etc.) and feeds
|
|
input events (Keyboard, Mouse, Multi-touch) into Evas, which then
|
|
selects the target object and calls the callbacks. It also provides
|
|
wrappers/glue for manipulating the Window/Surface.
|
|
|
|
|
|
|
|
**Ecore Fb:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This provides virtual terminal allocation, access and handling,
|
|
frame buffer information, raw input handling for keyboard, mouse and
|
|
touch (via tslib).
|
|
|
|
|
|
|
|
**Ecore File:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This provides file access convenience APIs for doing simple file
|
|
operations like renames, copies, listing directories and more. It also
|
|
supports file change monitoring and URL downloads.
|
|
|
|
|
|
|
|
**Ecore IMF:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is an input method abstraction framework to allow EFL to talk to
|
|
things like SCIM, IBus, Wayland and XIM. This allows for complex text
|
|
entry in languages such as Chinese, Japanese and Korean.
|
|
|
|
|
|
|
|
**Ecore IMF Evas:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library glues Input method support from Ecore IMF and Evas
|
|
together.
|
|
|
|
|
|
|
|
**Ecore Input:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This acts as a generic input layer where multiple display systems can
|
|
post events in the same format to the event queue.
|
|
|
|
|
|
|
|
**Ecore Input Evas:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This Routes events from Ecore Input into a given Evas canvas which
|
|
will then route the event further to the destination object and
|
|
callbacks.
|
|
|
|
|
|
|
|
**Ecore IPC:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This acts as a layer on top of Ecore Con which handles entire IPC
|
|
message packets, dealing with header delta compression and
|
|
portability, as well as ensuring an entire message is received in one
|
|
go as a single IPC message, regardless of payload data size. The
|
|
entire API is event based almost exactly like Ecore Con and thus it
|
|
supports all the transport layers Ecore Con supports.
|
|
|
|
|
|
|
|
|
|
**Ecore SDL:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This acts as a wrapper/glue around SDL to handle SDL Windows as well
|
|
as input events from SDL and tie them to the Ecore main-loop and event
|
|
queue.
|
|
|
|
|
|
|
|
**Ecore Wayland:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is a glue/wrapper library to interface EFL to Wayland libraries
|
|
to tie them into the Ecore main-loop and event queue.
|
|
|
|
|
|
|
|
**Ecore Win32:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This acts as glue/wrapper around Windows Win32 APIs to tie them into
|
|
the Ecore main-loop and event queue.
|
|
|
|
|
|
|
|
**Ecore WinCE:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This acts as glue/wrapper around Windows CE APIs to tie them into the
|
|
Ecore main-loop and event queue.
|
|
|
|
|
|
|
|
**Ecore X:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is a library to wrap/deal with Xlib make dealing with X11 less painful
|
|
and less footwork as well as being glue to tie these into the Ecore main-loop
|
|
and event queue.
|
|
|
|
|
|
|
|
**Edje:**
|
|
|
|
//BSD 2-Clause license// (except the epp binary which is GPLv2)
|
|
|
|
This is a graphics event, input, theme, animation and theme
|
|
abstraction library used to place many UI/UX elements into data files
|
|
(called edj files) that define how to react to incoming
|
|
events/signals, and define animation time lines, states, relative
|
|
scalable layout and much much more. It comes with a compiler that
|
|
compiles source "edc" files into "edj" files (which are actually just
|
|
data files managed by Eet). These "edj" files are fully portable and
|
|
can work on any OS/Architecture just like a JPEG or PNG might be
|
|
portable.
|
|
|
|
|
|
|
|
**Eet:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library is a data storage, encoding and decoding library
|
|
designed to be extremely compact, fast and easy to use. It can take
|
|
data structures directly from memory and serialize them portably to
|
|
disk, then de-serialize them right back to the same data structures in
|
|
memory, handling allocation and population of memory all for you in 1
|
|
call. It handles indirections such as pointers, linked lists, arrays
|
|
and hash tables too, so almost any level of data structure complexity
|
|
can be easily saved and loaded back. It is used for "edj" files by
|
|
Edje as well as all configuration in Enlightenment, Elementary and
|
|
Terminology. It supports encryption of data too via SSL, signing of
|
|
files, as well as various compression techniques. It also supports
|
|
encoding and decoding of image data in lossless or lossy form.
|
|
|
|
|
|
|
|
**Eeze:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library acts as an abstraction to discovering hardware interfaces
|
|
for sensors as well as removable media and much more.
|
|
|
|
|
|
|
|
**EFL:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is just some core common header data like a common version number
|
|
for EFL and how to expose the EO API.
|
|
|
|
|
|
|
|
**Efreet:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library provides code for handling Freedesktop.org standards such
|
|
as .desktop files, XDG Menus, Icon search paths and more. It provides
|
|
a central daemon to handle monitoring for changes that the library
|
|
talks to, and the daemon handles updating local cache files the
|
|
library reads.
|
|
|
|
|
|
|
|
**Eina:**
|
|
|
|
//LGPL v2 license//
|
|
|
|
This library provides low-level routines for common things like linked
|
|
lists, hash tables, growable arrays, basic string buffers, shared
|
|
string tokens, mmaped() file access, thread abstraction and locking,
|
|
memory pools, copy-on-write segments, iterators, matrices, general
|
|
data models, red/black trees, quad-trees, a simple SAX XML parser and
|
|
more.
|
|
|
|
|
|
|
|
**EIO:**
|
|
|
|
//LGPL v2 license//
|
|
|
|
This is an asynchronous I/O library for doing disk I/O without blocking.
|
|
|
|
|
|
|
|
**ElDBus:**
|
|
|
|
//LGPL v2 license//
|
|
|
|
This is a DBus access library to allow you to create DBus services as
|
|
well as clients. This glues in DBus into the main-loop so all access is
|
|
asynchronous.
|
|
|
|
|
|
|
|
**Embryo:**
|
|
|
|
//Small license (same as ZLib license)//
|
|
|
|
This is a small C-like language compiler and byte-code interpreter
|
|
library. This is used for scripting in Edje. The code is based on
|
|
original source from the Pawn/Small Language but has been made
|
|
portable (endianness issues fixed) and 64bit issues fixed, with the
|
|
runtime library being refactored to be extremely small.
|
|
|
|
|
|
|
|
**Emotion:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is a wrapper around Gstreamer and/or Xine and/or external
|
|
pluggable decoder binaries (generic binaries provided by Emotion
|
|
Generic Players or any suitable drop-in replacement). This glues in
|
|
the decoder library, and its output into a smart Evas object that will
|
|
display the playback for you as the video plays, as well as providing
|
|
higher level controls to seek, play, pause and query the stream
|
|
regardless of the back-end used. Note that using the Xine module may
|
|
effectively make this library GPL v2, so be aware of that before
|
|
turning that on.
|
|
|
|
|
|
|
|
**EO:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is a core object system API that EFL 1.8 and on depend on. The
|
|
API is not finalized, so do not depend on it yet in EFL 1.8, but
|
|
future EFL versions will lock it down.
|
|
|
|
This object system does simple and multiple inheritance, refcounting,
|
|
strong and weak references, auto-deletion of child objects, unifies
|
|
callback handling with a single path, and also abstracts object
|
|
pointers to be indirect table lookups for increased safety at runtime.
|
|
|
|
|
|
|
|
**EPhysics:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library provides a wrapper around the Bullet physics library,
|
|
allowing for it to be linked directly with Evas objects and control
|
|
their behavior as if they were real physical objects.
|
|
|
|
|
|
|
|
**Escape:**
|
|
|
|
//GPL v2 license//
|
|
|
|
This library is used as a compatibility library to provide missing
|
|
libc APIs for porting to the Playstation 3 (PS3) native runtime
|
|
environment.
|
|
|
|
|
|
|
|
**Ethumb:**
|
|
|
|
//LGPL v2 license//
|
|
|
|
This library provides core API for a thumbnailing daemon as well as
|
|
the thumbnail daemon itself. Ethumb Client talks with Ethumb to pass
|
|
off thumbnail generation to a central location to be done
|
|
asynchronously.
|
|
|
|
|
|
|
|
**Ethumb Client:**
|
|
|
|
//LGPL v2 license//
|
|
|
|
This is the client-side part of Ethumb that provides an API for
|
|
clients to request the Ethumb thumbnailer to generate or find cached
|
|
thumbnails of files.
|
|
|
|
|
|
|
|
**Evas:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This is the core rendering and scene graph abstraction library for
|
|
EFL. It manages a stateful 2D scene graph that defines the entire
|
|
content of any canvas. This supplies rendering back-ends for many
|
|
display systems like X11, Windows, Wayland, Frame-buffer etc. and via
|
|
many rendering APIs like OpenGL, OpenGL-ES 2, and pure software
|
|
implementations that are fast and accurate.
|
|
|
|
|
|
|
|
**Evil:**
|
|
|
|
//BSD 2-Clause license//
|
|
|
|
This library acts as a porting library for Windows to provide missing
|
|
libc calls not in Mingw32 that EFL needs.
|
|
|
|
|
|
|
|
|
|
COMPILING AND INSTALLING
|
|
------------------------
|
|
|
|
See the INSTALL file: https://git.enlightenment.org/core/efl.git/tree/INSTALL
|
|
|
|
|
|
REQUIREMENTS
|
|
------------
|
|
|
|
EFL requires a C and C++ compiler by default. C++ exists mostly to interface
|
|
to C++ libraries like Bullet and our C++ bindings.
|
|
|
|
Required by default:
|
|
|
|
* bullet
|
|
* libpng
|
|
* libjpeg
|
|
* gstreamer (1.x, 0.10 support optional. Ensure all codecs you want are installed.)
|
|
* zlib
|
|
* luajit (lua 5.1 or 5.2 support optional)
|
|
* libtiff
|
|
* openssl
|
|
* curl
|
|
* dbus
|
|
* libc
|
|
* fontconfig
|
|
* freetype2
|
|
* fribidi
|
|
* libpulse
|
|
* libsndfile
|
|
* libx11
|
|
* libxau
|
|
* libxcomposite
|
|
* libxdamage
|
|
* libxdmcp
|
|
* libxext
|
|
* libxfixes
|
|
* libxinerama
|
|
* libxrandr
|
|
* libxrender
|
|
* libxss
|
|
* libxtst
|
|
* libxcursor
|
|
* libxp
|
|
* libxi (2.2 or newer)
|
|
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
|
* giflib
|
|
* util-linux (limbount + libblkid)
|
|
* systemd / libudev
|
|
* poppler / poppler-cpp
|
|
* libraw
|
|
* libspectre
|
|
* librsvg
|
|
* openmp (clang needs libomp, while gcc uses libgomp)
|
|
|
|
You might want webp support so disable fewer loaders and remove webp
|
|
from the disablers with:
|
|
|
|
-Devas-loaders-disabler=json
|
|
|
|
Wayland support:
|
|
|
|
You may also want wayland support when on Linux. This enables support
|
|
for EFL to trget wayland support for client applications. To do this
|
|
supply:
|
|
|
|
-Dwl=true
|
|
|
|
Framebuffer support:
|
|
|
|
This requires linux frame-buffer support, headers etc. This supports
|
|
basic frame-buffers like /dev/fb as well as input via /dev/input for
|
|
keyboards and mice in a basic way. Enable this with:
|
|
|
|
-Dfb=true
|
|
|
|
For more modern framebuffer support you may want drm/kms rendering
|
|
support so enable this. This is what you also want for wayland
|
|
compositor support in enlightenment as it will want to be able to
|
|
render to a moder framebuffer tarbet with atomic buffer swapping. To
|
|
do this provide:
|
|
|
|
-Ddrm=true
|
|
|
|
You may want to change the install prefix for EFL with:
|
|
|
|
--prefix=/path/to/prefix
|
|
|
|
The default prefix if not given is "/usr/local". Many people like to
|
|
use prefixes like /opt/e or /opt/efl or /home/USERNAME/software etc.
|
|
|
|
COMPILER FLAGS
|
|
--------------
|
|
|
|
You can affect compilation optimization, debugging and other factors
|
|
by setting your CFLAGS environment variable (and CXXFLAGS). Be aware
|
|
that to ensure ABI stability you should use the exact same CFLAGS /
|
|
CXXFLAGS for all the build of EFL and any applications/libraries that
|
|
depend on them.
|
|
|
|
There are many other configure options that can be used, but in
|
|
general it is not a good idea to go enabling or disabling things
|
|
unless you wish to break things. The defaults are well tested, with
|
|
the above recommended options also being well tested. Go much further
|
|
and your mileage may vary wildly. Disabling features is a good way of
|
|
breaking EFL functionality, so it is not recommended to mess with
|
|
these without understanding the implications. The defaults
|
|
have been carefully considered to provide full functionality so users
|
|
will not be missing anything.
|
|
|
|
|
|
CRYPTOGRAPHY
|
|
------------
|
|
|
|
EFL officially offers openssl or gnutls as cryptography backends. By
|
|
default it uses "openssl" to do signature, cipher and related. Alternatively
|
|
one can use "gnutls" (some distros are strict about licenses and want gnutls
|
|
instead of openssl) You can switch to gnutls with:
|
|
|
|
-Dcrypto=gnutls
|