1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#!/usr/bin/env python
############################################################################
# #
# SETUP.PY #
# #
# Copyright (C) 2010-2011 Ada Core Technologies, Inc. #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/> #
# #
############################################################################
from distutils.command.build_ext import build_ext
from distutils.command.build_scripts import build_scripts
from distutils.core import setup
from distutils.extension import Extension
from distutils.sysconfig import get_python_inc, get_python_lib
import glob
import os
import platform
import sys
from gnatpython import __version__
# Distutils does not support support for compiled programs. So override de
# build_scripts command with ours. We first compile our program and copy
# it along with the Python scripts. Then we call the regular build_scripts
# command.
class build_scripts_gnatpython(build_scripts):
def run(self):
if 'Windows' in platform.system() or 'CYGWIN' in platform.system():
os.system('gcc -o scripts/rlimit src/rlimit/rlimit-NT.c')
else:
os.system('gcc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wl,-z,relro -o scripts/rlimit src/rlimit/rlimit.c')
# Update the scripts list
self.scripts = glob.glob('scripts/*')
build_scripts.run(self)
# Our C module requires a mingw compiler. On windows python will use by
# default the Microsoft one and even if we use the --compiler=mingw option
# it does not seem to work all the time. So override the build_ext command.
# If the the platform is windows use out manual procedure. Otherwise use
# the regular build_ext implementation.
class build_ext_gnatpython(build_ext):
def build_extension(self, ext):
if 'Windows' not in platform.system() and \
'CYGWIN' not in platform.system():
return build_ext.build_extension(self, ext)
else:
# Get the python installation prefix
python_prefix = sys.prefix
# The Python version
python_version = "%d.%d" % \
(sys.version_info[0], sys.version_info[1])
# The location of the static library (in fact an import library)
python_lib = "%s/libs/libpython%s%s.a" % \
(sys.prefix, sys.version_info[0], sys.version_info[1])
# Find the location of Python includes in various locations.
python_stdlib_dir = get_python_lib(True, False)
python_include_dir = None
for p in (get_python_inc(False),
python_stdlib_dir + '/config',
python_prefix + '/include/python/%s' % (python_version)):
if os.path.isfile(p + '/Python.h'):
python_include_dir = p
break
# Build our module with mingw GCC
os.system('gcc -shared -static-libgcc -o %s/gnatpython/_term.pyd %s -I%s %s' % \
(self.build_lib, ' '.join(ext.sources),
python_include_dir,
python_lib))
setup(name='gnatpython',
version=__version__,
author="AdaCore",
author_email="report@adacore.com",
packages=['gnatpython'],
scripts=glob.glob('scripts/*'),
cmdclass={'build_scripts': build_scripts_gnatpython,
'build_ext': build_ext_gnatpython},
ext_modules=[Extension('gnatpython._term',
['src/mod_term/terminals.c'])])
|