awips2/pythonPackages/scientific/setup.py
2016-06-27 15:10:22 -05:00

212 lines
7.7 KiB
Python
Executable file

#!/usr/bin/env python
from distutils.core import setup, Extension
from distutils.command.install_headers import install_headers
import os, sys
from glob import glob
class Dummy:
pass
pkginfo = Dummy()
execfile('Scientific/__pkginfo__.py', pkginfo.__dict__)
extra_compile_args = []
arrayobject_h_include = []
data_files = []
scripts = []
cmdclass = {}
options = {}
use_numpy = True
use_numeric = False
use_numarray = False
if "--numpy" in sys.argv:
sys.argv.remove("--numpy")
if "--numeric" in sys.argv:
use_numeric = True
use_numpy = False
sys.argv.remove("--numeric")
if "--numarray" in sys.argv:
use_numarray = True
use_numpy = False
sys.argv.remove("--numarray")
if use_numeric:
extra_compile_args.append("-DNUMERIC=1")
elif use_numarray:
extra_compile_args.append("-DNUMARRAY=1")
else :
extra_compile_args.append("-DNUMPY=1")
if sys.platform == 'win32':
arrayobject_h_include = [os.path.join(sys.prefix,
"Lib/site-packages/numpy/core/include")]
else:
arrayobject_h_include = [os.path.join(sys.prefix,
"lib/python%s.%s/site-packages/numpy/core/include"
% sys.version_info [:2])]
math_libraries = []
if sys.platform != 'win32':
math_libraries.append('m')
#
# Locate netCDF library
#
netcdf_prefix = None
for arg in sys.argv[1:]:
if arg[:16] == "--netcdf_prefix=":
netcdf_prefix = arg[16:]
sys.argv.remove(arg)
break
if sys.platform == 'win32':
netcdf_dll = None
for arg in sys.argv[1:]:
if arg[:13] == "--netcdf_dll=":
netcdf_dll = arg[13:]
sys.argv.remove(arg)
break
if netcdf_prefix is None:
try:
netcdf_prefix=os.environ['NETCDF_PREFIX']
except KeyError:
pass
if netcdf_prefix is None:
for netcdf_prefix in ['/usr/local', '/usr', '/sw']:
netcdf_include = os.path.join(netcdf_prefix, 'include')
netcdf_lib = os.path.join(netcdf_prefix, 'lib')
if os.path.exists(os.path.join(netcdf_include, 'netcdf.h')):
break
else:
netcdf_prefix = None
if netcdf_prefix is None:
print "netCDF not found, the netCDF module will not be built!"
if sys.platform != 'win32':
print "If netCDF is installed somewhere on this computer,"
print "please set NETCDF_PREFIX to the path where"
print "include/netcdf.h and lib/netcdf.a are located"
print "and re-run the build procedure."
ext_modules = []
else:
if sys.platform == 'win32':
if netcdf_dll is None:
print "Option --netcdf_dll is missing"
raise SystemExit
netcdf_include = netcdf_prefix
netcdf_h_file = os.path.join(netcdf_prefix, 'netcdf.h')
netcdf_lib = netcdf_dll
data_files.append(('DLLs', [os.path.join(netcdf_dll, 'netcdf.dll')]))
scripts.append('scientific_win32_postinstall.py')
options['bdist_wininst'] = {'install_script': "scientific_win32_postinstall.py"}
else:
print "Using netCDF installation in ", netcdf_prefix
netcdf_include = os.path.join(netcdf_prefix, 'include')
netcdf_h_file = os.path.join(netcdf_prefix, 'include', 'netcdf.h')
netcdf_lib = os.path.join(netcdf_prefix, 'lib')
ext_modules = [Extension('Scientific_netcdf',
['Src/Scientific_netcdf.c'],
include_dirs=['Include', netcdf_include]
+ arrayobject_h_include,
library_dirs=[netcdf_lib],
libraries = ['netcdf'],
extra_compile_args=extra_compile_args)]
try:
# Add code for including documentation in Mac packages
import bdist_mpkg
from distutils.command.bdist_mpkg import bdist_mpkg as bdist_mpkg
class my_bdist_mpkg(bdist_mpkg):
def initialize_options(self):
bdist_mpkg.initialize_options(self)
self.scheme_descriptions['examples'] = u'(Optional) ScientificPython example code'
self.scheme_map['examples'] = '/Developer/Python/ScientificPython/Examples'
self.scheme_copy['examples'] = 'Examples'
self.scheme_descriptions['doc'] = u'(Optional) ScientificPython documentation'
self.scheme_map['doc'] = '/Developer/Python/ScientificPython/Documentation'
self.scheme_copy['doc'] = 'Doc'
cmdclass['bdist_mpkg'] = my_bdist_mpkg
except ImportError:
pass
packages = ['Scientific', 'Scientific.Clustering', 'Scientific.Functions',
'Scientific.Geometry', 'Scientific.IO',
'Scientific.Physics', 'Scientific.QtWidgets',
'Scientific.Statistics', 'Scientific.Signals',
'Scientific.Threading', 'Scientific.TkWidgets',
'Scientific.Visualization', 'Scientific.MPI',
'Scientific.DistributedComputing']
ext_modules.append(Extension('Scientific_vector',
['Src/Scientific_vector.c'],
include_dirs=['Include']+arrayobject_h_include,
libraries=math_libraries,
extra_compile_args=extra_compile_args))
ext_modules.append(Extension('Scientific_affinitypropagation',
['Src/Scientific_affinitypropagation.c'],
include_dirs=['Include']+arrayobject_h_include,
libraries=math_libraries,
extra_compile_args=extra_compile_args))
ext_modules.append(Extension('Scientific_numerics_package_id',
['Src/Scientific_numerics_package_id.c'],
include_dirs=['Include']+arrayobject_h_include,
extra_compile_args=extra_compile_args))
ext_modules.append(Extension('Scientific_interpolation',
['Src/Scientific_interpolation.c'],
include_dirs=['Include']+arrayobject_h_include,
libraries=math_libraries,
extra_compile_args=extra_compile_args))
scripts.append('task_manager')
if sys.version[:3] >= '2.1':
packages.append('Scientific.BSP')
scripts.append('bsp_virtual')
class modified_install_headers(install_headers):
def finalize_options(self):
install_headers.finalize_options(self)
self.install_dir = \
os.path.join(os.path.split(self.install_dir)[0], 'Scientific')
cmdclass['install_headers'] = modified_install_headers
headers = glob(os.path.join ("Include","Scientific","*.h"))
if netcdf_prefix is not None:
headers.append(netcdf_h_file)
setup (name = "ScientificPython",
version = pkginfo.__version__,
description = "Various Python modules for scientific computing",
long_description =
"""ScientificPython is a collection of Python modules that are useful
for scientific computing. In this collection you will find modules
that cover basic geometry (vectors, tensors, transformations, vector
and tensor fields), quaternions, automatic derivatives, (linear)
interpolation, polynomials, elementary statistics, nonlinear
least-squares fits, unit calculations, Fortran-compatible text
formatting, 3D visualization via VRML, and two Tk widgets for simple
line plots and 3D wireframe models.""",
author = "Konrad Hinsen",
author_email = "hinsen@cnrs-orleans.fr",
url = "http://dirac.cnrs-orleans.fr/ScientificPython/",
license = "CeCILL",
packages = packages,
headers = headers,
ext_package = 'Scientific.'+sys.platform,
ext_modules = ext_modules,
scripts = scripts,
data_files = data_files,
cmdclass = cmdclass,
options = options,
)