Put in a first, still wip, version of the python bindings in a merged tree.
This is meant to be the 1.8 version of the wrappers and will include everything
that now is in the python folder.
Atm this include evas, ecore, edje, elementary and emotion (emotion still commented
in the build couse it need some more testing). Eo is used as a base for all the
objects that inherit from it in C, but in real nothing is used from Eo, it is
used more like a container to share code between the libs.
All the docs has been stripped out because we want to use the new sphinx style
docs that Kay has done in his git repo. (Kay: please wait a little bit to include
it, as working on the libs without docs is much more easy)
The new wrappers include a new container module called efl and thus you can live
with both the old and the new installation. This also means that you need to import
the new modules as:
"from efl import evas" (instead of the old "import evas")
The idea here is that you can make your code works with both version doing
something like:
try:
import evas
except:
from efl import evas
...like is done in the gtk bindings
Some stuff has been leaved out on purpose, because was old stuff (like the hacked
evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX
modules). See the TODO.txt file for more info. Probably some stuff is out just because I
missed them, let me know if you miss something.
Improvements from the old version:
- Py3 compatible (still some work to be done, but really only TODO, no problems to resolv)
- Should also works on other platforms, like windoz (but not tested)
- Unittests greatly improved, you can also run ALL tests at once
- much more simpler :)
I will contine the works in the next weeks and hope someone will help too.
NOTE: I switched back to setup.py instead of autotools, because that is the right way to
compile python stuff. So to build just use:
python setup.py install
or
python3 setup.py install
Enjoy
davemds
SVN revision: 83831
2013-02-11 14:32:50 -08:00
|
|
|
#! /usr/bin/env python
|
2013-11-21 12:17:21 -08:00
|
|
|
# encoding: utf-8
|
Put in a first, still wip, version of the python bindings in a merged tree.
This is meant to be the 1.8 version of the wrappers and will include everything
that now is in the python folder.
Atm this include evas, ecore, edje, elementary and emotion (emotion still commented
in the build couse it need some more testing). Eo is used as a base for all the
objects that inherit from it in C, but in real nothing is used from Eo, it is
used more like a container to share code between the libs.
All the docs has been stripped out because we want to use the new sphinx style
docs that Kay has done in his git repo. (Kay: please wait a little bit to include
it, as working on the libs without docs is much more easy)
The new wrappers include a new container module called efl and thus you can live
with both the old and the new installation. This also means that you need to import
the new modules as:
"from efl import evas" (instead of the old "import evas")
The idea here is that you can make your code works with both version doing
something like:
try:
import evas
except:
from efl import evas
...like is done in the gtk bindings
Some stuff has been leaved out on purpose, because was old stuff (like the hacked
evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX
modules). See the TODO.txt file for more info. Probably some stuff is out just because I
missed them, let me know if you miss something.
Improvements from the old version:
- Py3 compatible (still some work to be done, but really only TODO, no problems to resolv)
- Should also works on other platforms, like windoz (but not tested)
- Unittests greatly improved, you can also run ALL tests at once
- much more simpler :)
I will contine the works in the next weeks and hope someone will help too.
NOTE: I switched back to setup.py instead of autotools, because that is the right way to
compile python stuff. So to build just use:
python setup.py install
or
python3 setup.py install
Enjoy
davemds
SVN revision: 83831
2013-02-11 14:32:50 -08:00
|
|
|
|
2013-10-16 11:31:50 -07:00
|
|
|
import os
|
Put in a first, still wip, version of the python bindings in a merged tree.
This is meant to be the 1.8 version of the wrappers and will include everything
that now is in the python folder.
Atm this include evas, ecore, edje, elementary and emotion (emotion still commented
in the build couse it need some more testing). Eo is used as a base for all the
objects that inherit from it in C, but in real nothing is used from Eo, it is
used more like a container to share code between the libs.
All the docs has been stripped out because we want to use the new sphinx style
docs that Kay has done in his git repo. (Kay: please wait a little bit to include
it, as working on the libs without docs is much more easy)
The new wrappers include a new container module called efl and thus you can live
with both the old and the new installation. This also means that you need to import
the new modules as:
"from efl import evas" (instead of the old "import evas")
The idea here is that you can make your code works with both version doing
something like:
try:
import evas
except:
from efl import evas
...like is done in the gtk bindings
Some stuff has been leaved out on purpose, because was old stuff (like the hacked
evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX
modules). See the TODO.txt file for more info. Probably some stuff is out just because I
missed them, let me know if you miss something.
Improvements from the old version:
- Py3 compatible (still some work to be done, but really only TODO, no problems to resolv)
- Should also works on other platforms, like windoz (but not tested)
- Unittests greatly improved, you can also run ALL tests at once
- much more simpler :)
I will contine the works in the next weeks and hope someone will help too.
NOTE: I switched back to setup.py instead of autotools, because that is the right way to
compile python stuff. So to build just use:
python setup.py install
or
python3 setup.py install
Enjoy
davemds
SVN revision: 83831
2013-02-11 14:32:50 -08:00
|
|
|
import sys
|
2021-12-05 07:13:22 -08:00
|
|
|
import time
|
2015-01-19 16:35:27 -08:00
|
|
|
import platform
|
Put in a first, still wip, version of the python bindings in a merged tree.
This is meant to be the 1.8 version of the wrappers and will include everything
that now is in the python folder.
Atm this include evas, ecore, edje, elementary and emotion (emotion still commented
in the build couse it need some more testing). Eo is used as a base for all the
objects that inherit from it in C, but in real nothing is used from Eo, it is
used more like a container to share code between the libs.
All the docs has been stripped out because we want to use the new sphinx style
docs that Kay has done in his git repo. (Kay: please wait a little bit to include
it, as working on the libs without docs is much more easy)
The new wrappers include a new container module called efl and thus you can live
with both the old and the new installation. This also means that you need to import
the new modules as:
"from efl import evas" (instead of the old "import evas")
The idea here is that you can make your code works with both version doing
something like:
try:
import evas
except:
from efl import evas
...like is done in the gtk bindings
Some stuff has been leaved out on purpose, because was old stuff (like the hacked
evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX
modules). See the TODO.txt file for more info. Probably some stuff is out just because I
missed them, let me know if you miss something.
Improvements from the old version:
- Py3 compatible (still some work to be done, but really only TODO, no problems to resolv)
- Should also works on other platforms, like windoz (but not tested)
- Unittests greatly improved, you can also run ALL tests at once
- much more simpler :)
I will contine the works in the next weeks and hope someone will help too.
NOTE: I switched back to setup.py instead of autotools, because that is the right way to
compile python stuff. So to build just use:
python setup.py install
or
python3 setup.py install
Enjoy
davemds
SVN revision: 83831
2013-02-11 14:32:50 -08:00
|
|
|
import subprocess
|
2021-12-02 23:37:56 -08:00
|
|
|
import unittest
|
2021-11-17 22:22:27 -08:00
|
|
|
from distutils.version import LooseVersion
|
2021-12-02 23:37:56 -08:00
|
|
|
from setuptools import setup, Extension, Command
|
Put in a first, still wip, version of the python bindings in a merged tree.
This is meant to be the 1.8 version of the wrappers and will include everything
that now is in the python folder.
Atm this include evas, ecore, edje, elementary and emotion (emotion still commented
in the build couse it need some more testing). Eo is used as a base for all the
objects that inherit from it in C, but in real nothing is used from Eo, it is
used more like a container to share code between the libs.
All the docs has been stripped out because we want to use the new sphinx style
docs that Kay has done in his git repo. (Kay: please wait a little bit to include
it, as working on the libs without docs is much more easy)
The new wrappers include a new container module called efl and thus you can live
with both the old and the new installation. This also means that you need to import
the new modules as:
"from efl import evas" (instead of the old "import evas")
The idea here is that you can make your code works with both version doing
something like:
try:
import evas
except:
from efl import evas
...like is done in the gtk bindings
Some stuff has been leaved out on purpose, because was old stuff (like the hacked
evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX
modules). See the TODO.txt file for more info. Probably some stuff is out just because I
missed them, let me know if you miss something.
Improvements from the old version:
- Py3 compatible (still some work to be done, but really only TODO, no problems to resolv)
- Should also works on other platforms, like windoz (but not tested)
- Unittests greatly improved, you can also run ALL tests at once
- much more simpler :)
I will contine the works in the next weeks and hope someone will help too.
NOTE: I switched back to setup.py instead of autotools, because that is the right way to
compile python stuff. So to build just use:
python setup.py install
or
python3 setup.py install
Enjoy
davemds
SVN revision: 83831
2013-02-11 14:32:50 -08:00
|
|
|
|
2013-11-09 03:26:09 -08:00
|
|
|
script_path = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
2014-03-05 13:56:11 -08:00
|
|
|
|
2014-08-16 05:11:06 -07:00
|
|
|
# dependencies
|
2021-12-05 03:04:09 -08:00
|
|
|
EFL_MIN_VER = '1.25.99'
|
2021-12-02 23:37:56 -08:00
|
|
|
CYTHON_MIN_VERSION = '0.23.5'
|
2016-08-15 23:54:59 -07:00
|
|
|
CYTHON_BLACKLIST = ()
|
2014-08-16 05:11:06 -07:00
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
|
2021-12-05 03:00:47 -08:00
|
|
|
# basic utils
|
|
|
|
def read_file(rel_path):
|
|
|
|
with open(os.path.join(script_path, rel_path)) as fp:
|
|
|
|
return fp.read()
|
|
|
|
|
|
|
|
def cmd_output(cmd):
|
|
|
|
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
|
p.wait()
|
|
|
|
if p.returncode != 0:
|
|
|
|
print('WARNING: An error occurred while running "%s" (code %s)' % (cmd, p.returncode))
|
|
|
|
stderr_content = p.stderr.read().decode('utf-8').strip()
|
|
|
|
if stderr_content:
|
|
|
|
print(stderr_content)
|
|
|
|
return ''
|
|
|
|
return p.stdout.read().decode('utf-8').strip()
|
|
|
|
|
2021-12-05 03:24:38 -08:00
|
|
|
def get_version(rel_path):
|
|
|
|
for line in read_file(rel_path).splitlines():
|
|
|
|
if line.startswith('__version__'):
|
|
|
|
return line.split("'")[1]
|
|
|
|
raise SystemExit('Unable to find version string.')
|
|
|
|
|
|
|
|
|
|
|
|
# python-efl version from sources
|
|
|
|
RELEASE = get_version('efl/__init__.py')
|
2021-12-05 03:00:47 -08:00
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
# add git commit count for dev builds
|
2021-12-05 03:24:38 -08:00
|
|
|
if RELEASE.split('.')[2] == '99':
|
2021-12-05 03:00:47 -08:00
|
|
|
count = cmd_output('git rev-list --count HEAD') or '0'
|
|
|
|
RELEASE += 'a' + count
|
2021-12-02 23:37:56 -08:00
|
|
|
sys.stdout.write('Python-EFL: %s\n' % RELEASE)
|
2013-12-02 11:59:33 -08:00
|
|
|
|
2014-04-29 02:20:33 -07:00
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
# === check python version ===
|
|
|
|
sys.stdout.write('Checking for Python: ')
|
|
|
|
py_ver = sys.version_info
|
|
|
|
py_ver = '%s.%s.%s' % (py_ver[0], py_ver[1], py_ver[2])
|
2021-12-05 07:13:22 -08:00
|
|
|
if sys.hexversion < 0x020700f0:
|
|
|
|
raise SystemExit('too old. Found: %s Need at least 2.7.0' % py_ver)
|
2021-12-02 23:37:56 -08:00
|
|
|
sys.stdout.write('OK, found %s\n' % py_ver)
|
2021-12-05 07:13:22 -08:00
|
|
|
if sys.version_info.major == 2:
|
|
|
|
print(
|
|
|
|
'\n'
|
|
|
|
'WARNING: Python 2 support is deprecated and will be removed soon.\n'
|
|
|
|
' You should really upgrade to python 3, NOW !\n'
|
|
|
|
' ...you have been warned, continue at your own risk.\n'
|
|
|
|
)
|
|
|
|
time.sleep(5) # you really need to read the above message :P
|
2014-04-29 02:20:33 -07:00
|
|
|
|
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
# === use cython or pre-generated C files ===
|
|
|
|
USE_CYTHON = False
|
|
|
|
if os.getenv('DISABLE_CYTHON') is not None:
|
|
|
|
if os.path.exists(os.path.join(script_path, 'efl/eo/efl.eo.c')):
|
|
|
|
USE_CYTHON = False
|
|
|
|
else:
|
|
|
|
sys.exit(
|
|
|
|
'You have requested to use pregenerated files with DISABLE_CYTHON\n'
|
|
|
|
'but the files are not available!\n'
|
|
|
|
'Unset DISABLE_CYTHON from your build environment and try again.'
|
|
|
|
)
|
|
|
|
elif os.getenv('ENABLE_CYTHON') is not None:
|
|
|
|
USE_CYTHON = True
|
|
|
|
elif not os.path.exists(os.path.join(script_path, 'efl/eo/efl.eo.c')):
|
|
|
|
USE_CYTHON = True
|
|
|
|
elif os.path.exists(os.path.join(script_path, 'Makefile')):
|
|
|
|
USE_CYTHON = True
|
Put in a first, still wip, version of the python bindings in a merged tree.
This is meant to be the 1.8 version of the wrappers and will include everything
that now is in the python folder.
Atm this include evas, ecore, edje, elementary and emotion (emotion still commented
in the build couse it need some more testing). Eo is used as a base for all the
objects that inherit from it in C, but in real nothing is used from Eo, it is
used more like a container to share code between the libs.
All the docs has been stripped out because we want to use the new sphinx style
docs that Kay has done in his git repo. (Kay: please wait a little bit to include
it, as working on the libs without docs is much more easy)
The new wrappers include a new container module called efl and thus you can live
with both the old and the new installation. This also means that you need to import
the new modules as:
"from efl import evas" (instead of the old "import evas")
The idea here is that you can make your code works with both version doing
something like:
try:
import evas
except:
from efl import evas
...like is done in the gtk bindings
Some stuff has been leaved out on purpose, because was old stuff (like the hacked
evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX
modules). See the TODO.txt file for more info. Probably some stuff is out just because I
missed them, let me know if you miss something.
Improvements from the old version:
- Py3 compatible (still some work to be done, but really only TODO, no problems to resolv)
- Should also works on other platforms, like windoz (but not tested)
- Unittests greatly improved, you can also run ALL tests at once
- much more simpler :)
I will contine the works in the next weeks and hope someone will help too.
NOTE: I switched back to setup.py instead of autotools, because that is the right way to
compile python stuff. So to build just use:
python setup.py install
or
python3 setup.py install
Enjoy
davemds
SVN revision: 83831
2013-02-11 14:32:50 -08:00
|
|
|
|
2013-04-03 05:12:28 -07:00
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
# === pkg-config helper ===
|
2013-04-03 05:12:28 -07:00
|
|
|
def pkg_config(name, require, min_vers=None):
|
|
|
|
try:
|
2021-12-02 23:37:56 -08:00
|
|
|
sys.stdout.write('Checking for %s: ' % name)
|
2013-12-28 08:26:52 -08:00
|
|
|
|
2021-12-05 03:00:47 -08:00
|
|
|
ver = cmd_output('pkg-config --modversion %s' % require)
|
|
|
|
if not ver:
|
2021-12-02 23:37:56 -08:00
|
|
|
raise SystemExit('Cannot find %s with pkg-config.' % name)
|
2013-12-28 08:26:52 -08:00
|
|
|
|
2013-04-03 05:12:28 -07:00
|
|
|
if min_vers is not None:
|
2021-12-05 03:00:47 -08:00
|
|
|
assert LooseVersion(ver) >= LooseVersion(min_vers)
|
2021-12-02 23:37:56 -08:00
|
|
|
sys.stdout.write('OK, found %s\n' % ver)
|
2013-12-28 08:26:52 -08:00
|
|
|
|
2021-12-05 03:00:47 -08:00
|
|
|
cflags = cmd_output('pkg-config --cflags %s' % require).split()
|
|
|
|
libs = cmd_output('pkg-config --libs %s' % require).split()
|
2013-04-03 05:12:28 -07:00
|
|
|
return (cflags, libs)
|
|
|
|
except (OSError, subprocess.CalledProcessError):
|
2021-12-02 23:37:56 -08:00
|
|
|
raise SystemExit('Did not find %s with pkg-config.' % name)
|
|
|
|
except AssertionError:
|
|
|
|
raise SystemExit('%s version mismatch. Found: %s Needed %s' % (name, ver, min_vers))
|
2015-01-02 03:26:33 -08:00
|
|
|
|
|
|
|
|
2015-01-01 12:38:11 -08:00
|
|
|
ext_modules = []
|
|
|
|
py_modules = []
|
2021-12-02 23:37:56 -08:00
|
|
|
packages = ['efl']
|
2016-10-14 13:43:19 -07:00
|
|
|
common_cflags = [
|
2021-12-02 23:37:56 -08:00
|
|
|
'-fno-var-tracking-assignments', # seems to lower the mem used during build
|
|
|
|
'-Wno-misleading-indentation', # not needed (we don't indent the C code)
|
|
|
|
'-Wno-deprecated-declarations', # we bind deprecated functions
|
|
|
|
'-Wno-unused-variable', # eo_instance_from_object() is unused
|
|
|
|
'-Wno-format-security', # some cc don't like the way cython use EINA_LOG macros
|
|
|
|
# '-Werror', '-Wfatal-errors' # use this to stop build on first warnings
|
2016-10-14 13:43:19 -07:00
|
|
|
]
|
2020-06-25 09:54:03 -07:00
|
|
|
# remove clang unknown flags
|
2021-12-02 23:37:56 -08:00
|
|
|
if os.getenv('CC') == 'clang':
|
2020-06-25 09:54:03 -07:00
|
|
|
common_cflags.remove('-fno-var-tracking-assignments')
|
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
# force default visibility. See phab T504
|
|
|
|
if os.getenv('CFLAGS') is not None and '-fvisibility=' in os.environ['CFLAGS']:
|
|
|
|
os.environ['CFLAGS'] += ' -fvisibility=default'
|
2013-10-16 13:35:44 -07:00
|
|
|
|
2015-01-01 16:09:40 -08:00
|
|
|
|
2021-12-05 01:43:36 -08:00
|
|
|
if set(('build', 'build_ext', 'install', 'bdist', 'bdist_wheel', 'sdist')) & set(sys.argv):
|
2021-12-02 23:37:56 -08:00
|
|
|
# === check cython version ===
|
|
|
|
sys.stdout.write('Checking for Cython: ')
|
2015-01-02 03:26:33 -08:00
|
|
|
if USE_CYTHON:
|
|
|
|
# check if cython is installed
|
|
|
|
try:
|
2021-12-02 23:37:56 -08:00
|
|
|
import Cython
|
2015-01-02 03:26:33 -08:00
|
|
|
import Cython.Compiler.Options
|
|
|
|
except ImportError:
|
2021-12-02 23:37:56 -08:00
|
|
|
raise SystemExit('not found! Needed >= %s' % (CYTHON_MIN_VERSION))
|
2015-01-02 03:26:33 -08:00
|
|
|
|
|
|
|
# check min version
|
|
|
|
if LooseVersion(Cython.__version__) < LooseVersion(CYTHON_MIN_VERSION):
|
2021-12-02 23:37:56 -08:00
|
|
|
raise SystemExit('too old! Found %s Needed %s' % (
|
2015-01-02 03:26:33 -08:00
|
|
|
Cython.__version__, CYTHON_MIN_VERSION))
|
|
|
|
|
2015-10-06 11:54:49 -07:00
|
|
|
# check black-listed releases
|
|
|
|
if Cython.__version__.startswith(CYTHON_BLACKLIST):
|
2021-12-02 23:37:56 -08:00
|
|
|
raise SystemExit('found %s, its broken! Need another release' %
|
2015-10-06 11:54:49 -07:00
|
|
|
Cython.__version__)
|
2015-01-02 03:26:33 -08:00
|
|
|
|
2021-12-02 23:37:56 -08:00
|
|
|
sys.stdout.write('OK, found %s\n' % Cython.__version__)
|
|
|
|
MODULES_EXT = 'pyx'
|
2015-01-02 03:26:33 -08:00
|
|
|
# Stop compilation on first error
|
|
|
|
Cython.Compiler.Options.fast_fail = True
|
|
|
|
# Generates HTML files with annotated source
|
|
|
|
Cython.Compiler.Options.annotate = False
|
|
|
|
# Set to False to disable docstrings
|
|
|
|
Cython.Compiler.Options.docstrings = True
|
|
|
|
|
|
|
|
else:
|
2021-12-02 23:37:56 -08:00
|
|
|
sys.stdout.write('not needed, using pre-generated C files\n')
|
|
|
|
MODULES_EXT = 'c'
|
2015-01-01 16:09:40 -08:00
|
|
|
|
2013-12-02 11:59:33 -08:00
|
|
|
# === Eina ===
|
2015-01-01 13:08:09 -08:00
|
|
|
eina_cflags, eina_libs = pkg_config('Eina', 'eina', EFL_MIN_VER)
|
2013-12-02 11:59:33 -08:00
|
|
|
|
2013-11-29 09:31:21 -08:00
|
|
|
# === Eo ===
|
2015-01-01 13:08:09 -08:00
|
|
|
eo_cflags, eo_libs = pkg_config('Eo', 'eo', EFL_MIN_VER)
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.eo', ['efl/eo/efl.eo.' + MODULES_EXT],
|
|
|
|
extra_compile_args=eo_cflags + common_cflags,
|
|
|
|
extra_link_args=eo_libs
|
|
|
|
))
|
2013-12-02 11:59:33 -08:00
|
|
|
|
2013-11-29 09:31:21 -08:00
|
|
|
# === Utilities ===
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.utils.deprecated', ['efl/utils/deprecated.' + MODULES_EXT],
|
|
|
|
extra_compile_args=eina_cflags + common_cflags,
|
|
|
|
extra_link_args=eina_libs
|
|
|
|
))
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.utils.conversions', ['efl/utils/conversions.' + MODULES_EXT],
|
|
|
|
extra_compile_args=eo_cflags + common_cflags,
|
|
|
|
extra_link_args=eo_libs + eina_libs
|
|
|
|
))
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.utils.logger', ['efl/utils/logger.' + MODULES_EXT],
|
|
|
|
extra_compile_args=eina_cflags + common_cflags,
|
|
|
|
extra_link_args=eina_libs
|
|
|
|
))
|
|
|
|
py_modules.append('efl.utils.setup')
|
|
|
|
packages.append('efl.utils')
|
2013-09-20 02:01:50 -07:00
|
|
|
|
2013-11-29 09:31:21 -08:00
|
|
|
# === Evas ===
|
2015-01-01 13:08:09 -08:00
|
|
|
evas_cflags, evas_libs = pkg_config('Evas', 'evas', EFL_MIN_VER)
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.evas', ['efl/evas/efl.evas.' + MODULES_EXT],
|
|
|
|
extra_compile_args=evas_cflags + common_cflags,
|
|
|
|
extra_link_args=evas_libs
|
|
|
|
))
|
|
|
|
|
|
|
|
# === Ecore + EcoreFile ===
|
2015-01-01 13:08:09 -08:00
|
|
|
ecore_cflags, ecore_libs = pkg_config('Ecore', 'ecore', EFL_MIN_VER)
|
2021-12-02 23:37:56 -08:00
|
|
|
ecore_file_cflags, ecore_file_libs = pkg_config('EcoreFile', 'ecore-file', EFL_MIN_VER)
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.ecore', ['efl/ecore/efl.ecore.' + MODULES_EXT],
|
|
|
|
extra_compile_args=list(set(ecore_cflags + ecore_file_cflags + common_cflags)),
|
|
|
|
extra_link_args=ecore_libs + ecore_file_libs
|
|
|
|
))
|
2015-01-04 03:47:40 -08:00
|
|
|
|
2016-01-08 13:18:49 -08:00
|
|
|
# === Ecore Input ===
|
2021-12-02 23:37:56 -08:00
|
|
|
ecore_input_cflags, ecore_input_libs = pkg_config('EcoreInput', 'ecore-input', EFL_MIN_VER)
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.ecore_input', ['efl/ecore_input/efl.ecore_input.' + MODULES_EXT],
|
|
|
|
extra_compile_args=ecore_input_cflags + common_cflags,
|
|
|
|
extra_link_args=ecore_input_libs
|
|
|
|
))
|
2016-01-08 13:18:49 -08:00
|
|
|
|
2015-11-16 11:45:07 -08:00
|
|
|
# === Ecore Con ===
|
2021-12-02 23:37:56 -08:00
|
|
|
ecore_con_cflags, ecore_con_libs = pkg_config('EcoreCon', 'ecore-con', EFL_MIN_VER)
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.ecore_con', ['efl/ecore_con/efl.ecore_con.' + MODULES_EXT],
|
|
|
|
extra_compile_args=ecore_con_cflags + ecore_file_cflags + common_cflags,
|
|
|
|
extra_link_args=ecore_con_libs
|
|
|
|
))
|
2015-11-16 11:45:07 -08:00
|
|
|
|
2015-01-04 03:47:40 -08:00
|
|
|
# === Ecore X ===
|
2015-01-06 14:13:14 -08:00
|
|
|
try:
|
2021-12-02 23:37:56 -08:00
|
|
|
ecore_x_cflags, ecore_x_libs = pkg_config('EcoreX', 'ecore-x', EFL_MIN_VER)
|
2015-01-06 14:13:14 -08:00
|
|
|
except SystemExit:
|
2021-12-02 23:37:56 -08:00
|
|
|
print('Not found, will not be built')
|
2015-01-06 14:13:14 -08:00
|
|
|
else:
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.ecore_x', ['efl/ecore_x/efl.ecore_x.' + MODULES_EXT],
|
|
|
|
extra_compile_args=ecore_x_cflags + common_cflags,
|
|
|
|
extra_link_args=ecore_x_libs
|
|
|
|
))
|
2013-12-02 11:59:33 -08:00
|
|
|
|
2014-04-11 08:12:49 -07:00
|
|
|
# === Ethumb ===
|
2015-01-01 13:08:09 -08:00
|
|
|
ethumb_cflags, ethumb_libs = pkg_config('Ethumb', 'ethumb', EFL_MIN_VER)
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.ethumb', ['efl/ethumb/efl.ethumb.' + MODULES_EXT],
|
|
|
|
extra_compile_args=ethumb_cflags + common_cflags,
|
|
|
|
extra_link_args=ethumb_libs
|
|
|
|
))
|
2014-04-11 08:12:49 -07:00
|
|
|
|
2016-01-03 09:50:33 -08:00
|
|
|
# === Ethumb Client ===
|
2021-12-02 23:37:56 -08:00
|
|
|
ethumb_cl_cflags, ethumb_cl_libs = pkg_config('Ethumb_Client', 'ethumb_client', EFL_MIN_VER)
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.ethumb_client', ['efl/ethumb/efl.ethumb_client.' + MODULES_EXT],
|
|
|
|
extra_compile_args=ethumb_cl_cflags + common_cflags,
|
|
|
|
extra_link_args=ethumb_cl_libs
|
|
|
|
))
|
2014-04-11 08:12:49 -07:00
|
|
|
|
2013-11-29 09:31:21 -08:00
|
|
|
# === Edje ===
|
2015-01-01 13:08:09 -08:00
|
|
|
edje_cflags, edje_libs = pkg_config('Edje', 'edje', EFL_MIN_VER)
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.edje', ['efl/edje/efl.edje.' + MODULES_EXT],
|
|
|
|
extra_compile_args=edje_cflags + common_cflags,
|
|
|
|
extra_link_args=edje_libs
|
|
|
|
))
|
2014-04-06 03:52:52 -07:00
|
|
|
|
2015-01-06 14:13:14 -08:00
|
|
|
# === Edje_Edit ===
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.edje_edit', ['efl/edje_edit/efl.edje_edit.' + MODULES_EXT],
|
|
|
|
define_macros=[('EDJE_EDIT_IS_UNSTABLE_AND_I_KNOW_ABOUT_IT', None)],
|
|
|
|
extra_compile_args=edje_cflags + common_cflags,
|
|
|
|
extra_link_args=edje_libs
|
|
|
|
))
|
2014-04-06 03:52:52 -07:00
|
|
|
|
|
|
|
# === Emotion ===
|
2015-01-01 13:08:09 -08:00
|
|
|
emotion_cflags, emotion_libs = pkg_config('Emotion', 'emotion', EFL_MIN_VER)
|
2021-12-02 23:37:56 -08:00
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.emotion', ['efl/emotion/efl.emotion.' + MODULES_EXT],
|
|
|
|
extra_compile_args=emotion_cflags + common_cflags,
|
|
|
|
extra_link_args=emotion_libs
|
|
|
|
))
|
2014-04-06 03:52:52 -07:00
|
|
|
|
2013-11-29 09:31:21 -08:00
|
|
|
# === dbus mainloop integration ===
|
2021-12-02 23:37:56 -08:00
|
|
|
dbus_cflags, dbus_libs = pkg_config('DBus', 'dbus-python', '0.83.0')
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.dbus_mainloop', ['efl/dbus_mainloop/efl.dbus_mainloop.' + MODULES_EXT,
|
|
|
|
'efl/dbus_mainloop/e_dbus.c'],
|
|
|
|
extra_compile_args=dbus_cflags + ecore_cflags + common_cflags,
|
|
|
|
extra_link_args=dbus_libs + ecore_libs
|
|
|
|
))
|
2013-12-02 11:59:33 -08:00
|
|
|
|
2013-11-29 09:31:21 -08:00
|
|
|
# === Elementary ===
|
2021-12-02 23:37:56 -08:00
|
|
|
elm_cflags, elm_libs = pkg_config('Elementary', 'elementary', EFL_MIN_VER)
|
|
|
|
ext_modules.append(Extension(
|
|
|
|
'efl.elementary.__init__', ['efl/elementary/__init__.' + MODULES_EXT],
|
|
|
|
extra_compile_args=elm_cflags + common_cflags,
|
|
|
|
extra_link_args=elm_libs
|
|
|
|
))
|
|
|
|
packages.append('efl.elementary')
|
|
|
|
|
|
|
|
# Cythonize all ext_modules
|
2015-01-02 03:26:33 -08:00
|
|
|
if USE_CYTHON:
|
2021-12-02 23:37:56 -08:00
|
|
|
from Cython.Build import cythonize
|
|
|
|
ext_modules = cythonize(
|
|
|
|
ext_modules,
|
|
|
|
include_path=['include'],
|
|
|
|
compiler_directives={
|
|
|
|
#'c_string_type': 'unicode',
|
|
|
|
#'c_string_encoding': 'utf-8',
|
|
|
|
'embedsignature': True,
|
|
|
|
'binding': True,
|
|
|
|
'language_level': 2,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# === setup.py test command ===
|
|
|
|
class Test(Command):
|
|
|
|
description = 'Run all the available unit tests using efl in build/'
|
|
|
|
user_options = []
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def finalize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
sys.path.insert(0, 'build/lib.%s-%s-%d.%d' % (
|
|
|
|
platform.system().lower(), platform.machine(),
|
|
|
|
sys.version_info[0], sys.version_info[1]))
|
|
|
|
if 'efl' in sys.modules:
|
|
|
|
del sys.modules['efl']
|
|
|
|
|
|
|
|
loader = unittest.TestLoader()
|
|
|
|
suite = loader.discover('./tests')
|
|
|
|
runner = unittest.TextTestRunner(verbosity=1, buffer=True)
|
|
|
|
runner.run(suite)
|
|
|
|
|
|
|
|
|
|
|
|
# === setup.py build_doc command ===
|
|
|
|
try:
|
|
|
|
from sphinx.setup_command import BuildDoc
|
|
|
|
except ImportError:
|
|
|
|
class BuildDoc(Command):
|
|
|
|
description = 'build docs using sphinx, that must be installed.'
|
|
|
|
version = ''
|
|
|
|
release = ''
|
|
|
|
user_options = []
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def finalize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
print('Error: sphinx not found')
|
|
|
|
|
|
|
|
|
|
|
|
# === setup.py clean_generated_files command ===
|
|
|
|
class CleanGenerated(Command):
|
|
|
|
description = 'Clean C and html files generated by Cython'
|
|
|
|
user_options = []
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def finalize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
for lib in ('eo', 'evas', 'ecore', 'ecore_x', 'ecore_input', 'ecore_con', 'edje',
|
|
|
|
'emotion', 'elementary', 'ethumb', 'dbus_mainloop', 'utils'):
|
|
|
|
lib_path = os.path.join(script_path, 'efl', lib)
|
|
|
|
for root, _dirs, files in os.walk(lib_path):
|
|
|
|
for fname in files:
|
|
|
|
if fname.endswith(('.c', '.html')) and fname != 'e_dbus.c':
|
|
|
|
self.remove(os.path.join(root, fname))
|
|
|
|
|
|
|
|
def remove(self, fullpath):
|
|
|
|
print('removing %s' % fullpath.replace(script_path, '').lstrip('/'))
|
|
|
|
os.remove(fullpath)
|
|
|
|
|
|
|
|
|
|
|
|
# === setup.py uninstall command ===
|
|
|
|
RECORD_FILE = 'installed_files-%d.%d.txt' % sys.version_info[:2]
|
|
|
|
class Uninstall(Command):
|
|
|
|
description = 'remove all the installed files recorded at installation time'
|
|
|
|
user_options = []
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def finalize_options(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def remove_entry(self, entry):
|
|
|
|
if os.path.isfile(entry):
|
|
|
|
try:
|
|
|
|
print('removing file %s' % entry)
|
|
|
|
os.unlink(entry)
|
|
|
|
except OSError as err:
|
|
|
|
print(err)
|
|
|
|
return
|
|
|
|
|
|
|
|
directory = os.path.dirname(entry)
|
|
|
|
while os.listdir(directory) == []:
|
|
|
|
try:
|
|
|
|
print('removing empty directory %s' % directory)
|
|
|
|
os.rmdir(directory)
|
|
|
|
except OSError as err:
|
|
|
|
print(err)
|
|
|
|
break
|
|
|
|
directory = os.path.dirname(directory)
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
if not os.path.exists(RECORD_FILE):
|
|
|
|
print('ERROR: No %s file found!' % RECORD_FILE)
|
|
|
|
else:
|
|
|
|
for entry in open(RECORD_FILE).read().split():
|
|
|
|
self.remove_entry(entry)
|
2015-01-02 03:26:33 -08:00
|
|
|
|
2013-11-22 16:14:22 -08:00
|
|
|
|
2013-10-16 13:35:44 -07:00
|
|
|
setup(
|
2021-12-02 23:37:56 -08:00
|
|
|
name='python-efl',
|
|
|
|
fullname='Python bindings for Enlightenment Foundation Libraries',
|
|
|
|
description='Python bindings for Enlightenment Foundation Libraries',
|
2021-12-05 03:00:47 -08:00
|
|
|
long_description=read_file('README.md'),
|
2014-04-29 02:20:33 -07:00
|
|
|
version=RELEASE,
|
2014-12-21 03:43:56 -08:00
|
|
|
author='Davide Andreoli, Kai Huuhko, and others',
|
2021-12-02 23:37:56 -08:00
|
|
|
author_email='dave@gurumeditation.it, kai.huuhko@gmail.com',
|
|
|
|
contact='Enlightenment developer mailing list',
|
|
|
|
contact_email='enlightenment-devel@lists.sourceforge.net',
|
|
|
|
url='http://www.enlightenment.org',
|
|
|
|
license='GNU Lesser General Public License (LGPL)',
|
|
|
|
keywords='efl wrapper binding enlightenment eo evas ecore edje emotion elementary ethumb',
|
2014-12-21 03:43:56 -08:00
|
|
|
classifiers=[
|
|
|
|
'Development Status :: 5 - Production/Stable',
|
|
|
|
'Environment :: X11 Applications',
|
|
|
|
'Environment :: Console :: Framebuffer',
|
|
|
|
'Intended Audience :: End Users/Desktop',
|
|
|
|
'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
|
|
|
|
'Operating System :: POSIX',
|
|
|
|
'Programming Language :: C',
|
|
|
|
'Programming Language :: Cython',
|
|
|
|
'Programming Language :: Python :: 2',
|
|
|
|
'Programming Language :: Python :: 3',
|
|
|
|
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
|
|
'Topic :: Software Development :: User Interfaces',
|
|
|
|
'Topic :: Software Development :: Widget Sets',
|
|
|
|
],
|
2014-04-29 02:20:33 -07:00
|
|
|
cmdclass={
|
2015-01-19 16:35:27 -08:00
|
|
|
'test': Test,
|
2013-10-16 13:35:44 -07:00
|
|
|
'build_doc': BuildDoc,
|
2015-01-04 07:00:15 -08:00
|
|
|
'clean_generated_files': CleanGenerated,
|
|
|
|
'uninstall': Uninstall,
|
2014-04-29 02:20:33 -07:00
|
|
|
},
|
|
|
|
command_options={
|
2014-03-02 14:09:54 -08:00
|
|
|
'build_doc': {
|
2021-12-02 23:37:56 -08:00
|
|
|
'version': ('setup.py', RELEASE),
|
2015-01-04 07:00:15 -08:00
|
|
|
'release': ('setup.py', RELEASE),
|
|
|
|
},
|
|
|
|
'install': {
|
2015-01-19 16:58:57 -08:00
|
|
|
'record': ('setup.py', RECORD_FILE),
|
2015-03-21 01:08:25 -07:00
|
|
|
},
|
2014-04-29 02:20:33 -07:00
|
|
|
},
|
|
|
|
packages=packages,
|
2015-01-02 03:26:33 -08:00
|
|
|
ext_modules=ext_modules,
|
2015-01-01 12:38:11 -08:00
|
|
|
py_modules=py_modules,
|
2021-12-02 23:37:56 -08:00
|
|
|
zip_safe=False,
|
2013-10-16 13:35:44 -07:00
|
|
|
)
|