setup.py.in
5.8 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#############################################################################
# Disutils setup file for ctools Python extension module #
# ------------------------------------------------------------------------- #
# Copyright (C) 2011-2012 Juergen Knoedlseder #
# ------------------------------------------------------------------------- #
# #
# 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.core import setup, Extension
from distutils import sysconfig
import glob
import os
import sys
# Detect execution mode
is_build = True
if (len(sys.argv) >= 2):
if (sys.argv[1] == 'install'):
is_build = False
if is_build:
sys.stdout.write("Python extension module building:\n")
else:
sys.stdout.write("Python extension module installation:\n")
# Darwin MacPorts kluge: Remove -L/opt/local/lib path from LDSHARED as this
# overrides the GammaLib settings. Otherwise, MacPorts libraries would be
# used instead of the libraries selected by GammaLib
if sys.platform.lower().startswith("darwin"):
# Get configuration variables
cvars = sysconfig.get_config_vars()
# Extract LDSHARED
ldshared_old = cvars.get('LDSHARED')
ldshared_new = ''
ldshared_rm = ''
for option in ldshared_old.split(' '):
if option.lstrip().find('-L/opt/local/lib') != 0:
ldshared_new += option + ' '
else:
ldshared_rm += option + ' '
if (len(ldshared_rm) > 0):
sys.stdout.write("Removed following option(s) from LDSHARED: "+ldshared_rm+"\n");
# Set LDSHARED
cvars['LDSHARED'] = ldshared_new
# Set default include directories and data files
include_dirs = ['@prefix@/include/gammalib']
install_files = glob.glob('@top_srcdir@/pyext/*.i')
library_dirs = ['../src/.libs']
runtime_library_dirs = ['../src/.libs']
libraries = ['ctools','gamma']
# Add install directory to runtime library path
if os.path.exists('@prefix@/lib'):
library_dirs.append('@prefix@/lib')
runtime_library_dirs.append('@prefix@/lib')
# Add application include files. The method we use here is not very
# intelligent as it simple will add all names that start with 'ct'
# in the src directory. Once we added the ctools script we had to
# add an explicit filter to avoid appending those.
dirs = glob.glob('../src/ct*')
for dir in dirs:
if len(dir) > 0 and 'ctools' not in dir:
path = os.path.abspath(dir)
include_dirs.append(path)
# Add extra libraries
extra_libs = ('@PYTHON_EXTRA_LIBS@').split(',')
for extra_lib in extra_libs:
if len(extra_lib) > 0:
libraries.append(extra_lib)
# Get extra library paths
extra_lib_paths = ('@LDFLAGS@').split(' ')
for extra_lib_path in extra_lib_paths:
if extra_lib_path.lstrip().find('-L') == 0:
dir = extra_lib_path.lstrip().lstrip('-L')
if len(dir) > 0:
library_dirs.append(dir)
runtime_library_dirs.append(dir)
# Get extra include directories
extra_include_dirs = ('@CPPFLAGS@').split(' ')
for extra_include_dir in extra_include_dirs:
if extra_include_dir.lstrip().find('-I') == 0:
dir = extra_include_dir.lstrip().lstrip('-I')
if len(dir) > 0:
include_dirs.append(dir)
# Set data files to install.
data_files=[('@prefix@/share/ctools/swig', install_files)]
# Optionally enable OpenMP
if '@OPENMP_TRUE@' != '#':
extra_compile_args = ['@OPENMP_CXXFLAGS@']
extra_link_args = ['@OPENMP_CXXFLAGS@']
else:
extra_compile_args = []
extra_link_args = []
# Setup
setup(name='@PACKAGE_NAME@',
version='@PACKAGE_VERSION@',
description='ctools Python bindings',
author='Juergen Knoedlseder',
author_email='@PACKAGE_BUGREPORT@',
url='http://gammalib.sourceforge.net/',
py_modules=['ctools.ctools', 'ctools.obsutils'],
ext_modules=[Extension('ctools._ctools', ['ctools/ctools_wrap.cpp'],
include_dirs=include_dirs,
library_dirs=library_dirs,
libraries=libraries,
runtime_library_dirs=runtime_library_dirs,
extra_compile_args=extra_compile_args,
extra_link_args=extra_link_args)],
data_files=data_files,
license="GNU GPL v3",
long_description="CTA science analysis tools",
platforms=["Linux", "Solaris", "Mac OS-X", "Unix", "BSD"],
)
# Post-processing. A symbolic link is created to the directory containing the
# shared wrapper libraries so that we can add this directory to the PYTHONPATH
# for testing.
if is_build:
try:
os.chdir('build')
os.remove('ctools')
sys.stdout.write("Removed symbolic link build/ctools.\n")
except:
pass
try:
path = glob.glob('lib.*')
os.symlink(path[0], 'ctools')
sys.stdout.write("Created symbolic link build/ctools.\n")
except:
sys.stdout.write("WARNING: Failed to create symbolic link build/ctools.\n")