kivy/setup.py

244 lines
8.2 KiB
Python

import sys
from os.path import join, dirname, realpath, sep
from os import walk
from setuptools import setup, Extension
# extract version (simulate doc generation, kivy will be not imported)
import kivy
# extra build commands go in the cmdclass dict {'command-name': CommandClass}
# see tools.packaging.{platform}.build.py for custom build commands for
# portable packages. also e.g. we use build_ext command from cython if its
# installed for c extensions.
cmdclass = {}
# add build rules for portable packages to cmdclass
if sys.platform == 'win32':
from kivy.tools.packaging.win32.build import WindowsPortableBuild
cmdclass['build_portable'] = WindowsPortableBuild
elif sys.platform == 'darwin':
from kivy.tools.packaging.osx.build import OSXPortableBuild
cmdclass['build_portable'] = OSXPortableBuild
from kivy.tools.packaging.factory import FactoryBuild
cmdclass['build_factory'] = FactoryBuild
#
# Detect options
#
c_options = {
'use_opengl_es2': True,
'use_opengl_debug': True,
'use_glew': False,
'use_mesagl': False}
if sys.platform == 'win32':
print 'Windows platform detected, force GLEW usage.'
c_options['use_glew'] = True
print 'Generate config.h'
with open(join(dirname(__file__), 'kivy', 'graphics', 'config.h'), 'w') as fd:
fd.write('// Autogenerated file for Kivy C configuration\n')
for k, v in c_options.iteritems():
fd.write('#define __%s %d\n' % (k.upper(), int(v)))
print 'Generate config.pxi'
with open(join(dirname(__file__), 'kivy', 'graphics', 'config.pxi'), 'w') as fd:
fd.write('# Autogenerated file for Kivy Cython configuration\n')
for k, v in c_options.iteritems():
fd.write('DEF %s = %d\n' % (k.upper(), int(v)))
# extension modules
ext_modules = []
# list all files to compile
import fnmatch
import os
pyx_files = []
kivy_libs_dir = realpath(kivy.kivy_libs_dir)
for root, dirnames, filenames in os.walk(join(dirname(__file__), 'kivy')):
# ignore lib directory
if realpath(root).startswith(kivy_libs_dir):
continue
for filename in fnmatch.filter(filenames, '*.pyx'):
pyx_files.append(os.path.join(root, filename))
# check for cython
try:
have_cython = True
from Cython.Distutils import build_ext
except:
have_cython = False
# create .c for every module
if 'sdist' in sys.argv and have_cython:
from Cython.Compiler.Main import compile
print 'Generating C files...',
compile(pyx_files)
print 'Done !'
# add cython core extension modules if cython is available
if have_cython:
cmdclass['build_ext'] = build_ext
# this is an hack to make setuptools works with Cython
# without this hack, cython is not executed, and we don't have C files at
# the end. More information can be found at
# http://mail.python.org/pipermail/distutils-sig/2007-September/008204.html
# The solution taken is http://pypi.python.org/pypi/setuptools_cython/
if 'setuptools.extension' in sys.modules:
m = sys.modules['setuptools.extension']
m.Extension.__dict__ = m._Extension.__dict__
else:
pyx_files = ['%s.c' % x[:-4] for x in pyx_files]
if True:
libraries = []
include_dirs = []
extra_link_args = []
if sys.platform == 'win32':
libraries.append('opengl32')
elif sys.platform == 'darwin':
# On OSX, it's not -lGL, but -framework OpenGL...
extra_link_args = ['-framework', 'OpenGL']
elif sys.platform.startswith('freebsd'):
include_dirs += ['/usr/local/include']
extra_link_args += ['-L', '/usr/local/lib']
else:
libraries.append('GL')
if c_options['use_glew']:
libraries.append('GLEW')
# simple extensions
for pyx in (x for x in pyx_files if not 'graphics' in x):
module_name = '.'.join(pyx.split('.')[:-1]).replace(sep, '.')
ext_modules.append(Extension(module_name, [pyx]))
# opengl aware modules
for pyx in (x for x in pyx_files if 'graphics' in x):
module_name = '.'.join(pyx.split('.')[:-1]).replace(sep, '.')
ext_modules.append(Extension(
module_name, [pyx],
libraries=libraries,
include_dirs=include_dirs,
extra_link_args=extra_link_args))
#poly2try extension
"""
ext_modules.append(Extension('kivy.c_ext.p2t', [
'kivy/lib/poly2tri/src/p2t.pyx',
'kivy/lib/poly2tri/poly2tri/common/shapes.cc',
'kivy/lib/poly2tri/poly2tri/sweep/advancing_front.cc',
'kivy/lib/poly2tri/poly2tri/sweep/cdt.cc',
'kivy/lib/poly2tri/poly2tri/sweep/sweep.cc',
'kivy/lib/poly2tri/poly2tri/sweep/sweep_context.cc'
], language="c++"))
"""
#setup datafiles to be included in the disytibution, liek examples...
#extracts all examples files except sandbox
data_file_prefix = 'share/kivy-'
examples = {}
examples_allowed_ext = ('readme', 'py', 'wav', 'png', 'jpg', 'svg',
'avi', 'gif', 'txt', 'ttf', 'obj', 'mtl')
for root, subFolders, files in walk('examples'):
if 'sandbox' in root:
continue
for file in files:
ext = file.split('.')[-1].lower()
if ext not in examples_allowed_ext:
continue
filename = join(root, file)
directory = '%s%s' % (data_file_prefix, dirname(filename))
if not directory in examples:
examples[directory] = []
examples[directory].append(filename)
# setup !
setup(
name='Kivy',
version=kivy.__version__,
author='Kivy Crew',
author_email='kivy-dev@googlegroups.com',
url='http://kivy.org/',
license='LGPL',
description='A framework for making accelerated multitouch UI',
ext_modules=ext_modules,
cmdclass=cmdclass,
setup_requires=['nose>=0.11'],
test_suite='nose.collector',
packages=[
'kivy',
'kivy.core',
'kivy.core.audio',
'kivy.core.camera',
'kivy.core.clipboard',
'kivy.core.image',
'kivy.core.gl',
'kivy.core.spelling',
'kivy.core.svg',
'kivy.core.text',
'kivy.core.video',
'kivy.core.window',
'kivy.graphics',
'kivy.input',
'kivy.input.postproc',
'kivy.input.providers',
'kivy.lib',
'kivy.lib.osc',
'kivy.modules',
'kivy.tools',
'kivy.tools.packaging',
'kivy.tools.packaging.win32',
'kivy.tools.packaging.osx',
'kivy.uix',
],
package_dir={'kivy': 'kivy'},
package_data={'kivy': [
'data/*.kv',
'data/fonts/*.ttf',
'data/images/*.png',
'data/glsl/*.png',
'data/glsl/*.vs',
'data/glsl/*.fs',
'tools/packaging/README.txt',
'tools/packaging/win32/kivy.bat',
'tools/packaging/win32/README.txt',
'tools/packaging/osx/kivy.sh']},
data_files=examples.items(),
classifiers=[
'Development Status :: 3 - Alpha',
'Environment :: MacOS X',
'Environment :: Win32 (MS Windows)',
'Environment :: X11 Applications',
'Intended Audience :: Developers',
'Intended Audience :: End Users/Desktop',
'Intended Audience :: Information Technology',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: GNU Library or Lesser '
'General Public License (LGPL)',
'Natural Language :: English',
'Operating System :: MacOS :: MacOS X',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX :: BSD :: FreeBSD',
'Operating System :: POSIX :: Linux',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Artistic Software',
'Topic :: Games/Entertainment',
'Topic :: Multimedia :: Graphics :: 3D Rendering',
'Topic :: Multimedia :: Graphics :: Capture :: Digital Camera',
'Topic :: Multimedia :: Graphics :: Presentation',
'Topic :: Multimedia :: Graphics :: Viewers',
'Topic :: Multimedia :: Sound/Audio :: Players :: MP3',
'Topic :: Multimedia :: Video :: Display',
'Topic :: Scientific/Engineering :: Human Machine Interfaces',
'Topic :: Scientific/Engineering :: Visualization',
'Topic :: Software Development :: Libraries :: Application Frameworks',
'Topic :: Software Development :: User Interfaces'])