RS-Tile-Creator / lib /setup.py
JunchuanYu's picture
Upload 5 files
3e8ed69
raw
history blame
11.4 kB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Setup script for GDAL Python bindings.
# Inspired by psycopg2 setup.py file
# http://www.initd.org/tracker/psycopg/browser/psycopg2/trunk/setup.py
# Howard Butler [email protected]
gdal_version = '2.4.4'
import sys
import shutil
import os
from glob import glob
# ---------------------------------------------------------------------------
# Switches
# ---------------------------------------------------------------------------
HAVE_NUMPY=False
HAVE_SETUPTOOLS = False
BUILD_FOR_CHEESESHOP = False
GNM_ENABLED = False
# ---------------------------------------------------------------------------
# Default build options
# (may be overridden with setup.cfg or command line switches).
# ---------------------------------------------------------------------------
include_dirs = ['../../port', '../../gcore', '../../alg', '../../ogr/', '../../ogr/ogrsf_frmts', '../../gnm', '../../apps']
library_dirs = ['../../.libs', '../../']
libraries = ['gdal']
# ---------------------------------------------------------------------------
# Helper Functions
# ---------------------------------------------------------------------------
# Function to find numpy's include directory
def get_numpy_include():
if HAVE_NUMPY:
return numpy.get_include()
else:
return '.'
def copy_data_tree(datadir, destdir):
try:
shutil.rmtree(destdir)
except OSError:
pass
shutil.copytree(datadir, destdir)
# ---------------------------------------------------------------------------
# Imports
# ---------------------------------------------------------------------------
try:
import numpy
HAVE_NUMPY = True
# check version
numpy_major = numpy.__version__.split('.')[0]
if int(numpy_major) < 1:
print("numpy version must be > 1.0.0")
HAVE_NUMPY = False
else:
# print ('numpy include', get_numpy_include())
if get_numpy_include() =='.':
print("numpy headers were not found! Array support will not be enabled")
HAVE_NUMPY=False
except ImportError:
pass
fixer_names = [
'lib2to3.fixes.fix_import',
'lib2to3.fixes.fix_next',
'lib2to3.fixes.fix_renames',
'lib2to3.fixes.fix_unicode',
'lib2to3.fixes.fix_ws_comma',
'lib2to3.fixes.fix_xrange',
]
extra = {}
try:
from setuptools import setup
from setuptools import Extension
HAVE_SETUPTOOLS = True
except ImportError:
from distutils.core import setup, Extension
try:
from distutils.command.build_py import build_py_2to3 as build_py
from distutils.command.build_scripts import build_scripts_2to3 as build_scripts
except ImportError:
from distutils.command.build_py import build_py
from distutils.command.build_scripts import build_scripts
else:
build_py.fixer_names = fixer_names
build_scripts.fixer_names = fixer_names
else:
if sys.version_info >= (3,):
from lib2to3.refactor import get_fixers_from_package
all_fixers = set(get_fixers_from_package('lib2to3.fixes'))
exclude_fixers = sorted(all_fixers.difference(fixer_names))
extra['use_2to3'] = True
extra['use_2to3_fixers'] = []
extra['use_2to3_exclude_fixers'] = exclude_fixers
class gdal_config_error(Exception): pass
from distutils.command.build_ext import build_ext
from distutils.ccompiler import get_default_compiler
def fetch_config(option, gdal_config='gdal-config'):
command = gdal_config + " --%s" % option
try:
import subprocess
command, args = command.split()[0], command.split()[1]
from sys import version_info
if version_info >= (3,0,0):
try:
p = subprocess.Popen([command, args], stdout=subprocess.PIPE)
except OSError:
import sys
e = sys.exc_info()[1]
raise gdal_config_error(e)
r = p.stdout.readline().decode('ascii').strip()
else:
exec("""try:
p = subprocess.Popen([command, args], stdout=subprocess.PIPE)
except OSError, e:
raise gdal_config_error, e""")
r = p.stdout.readline().strip()
p.stdout.close()
p.wait()
except ImportError:
import popen2
p = popen2.popen3(command)
r = p[0].readline().strip()
if not r:
raise Warning(p[2].readline())
return r
class gdal_ext(build_ext):
GDAL_CONFIG = 'gdal-config'
user_options = build_ext.user_options[:]
user_options.extend([
('gdal-config=', None,
"The name of the gdal-config binary and/or a full path to it"),
])
def initialize_options(self):
build_ext.initialize_options(self)
self.numpy_include_dir = get_numpy_include()
self.gdaldir = None
self.gdal_config = self.GDAL_CONFIG
self.already_raised_no_config_error = False
def get_compiler(self):
return self.compiler or get_default_compiler()
def get_gdal_config(self, option):
try:
return fetch_config(option, gdal_config = self.gdal_config)
except gdal_config_error:
# If an error is thrown, it is possibly because
# the gdal-config location given in setup.cfg is
# incorrect, or possibly the default -- ../../apps/gdal-config
# We'll try one time to use the gdal-config that might be
# on the path. If that fails, we're done, however.
if not self.already_raised_no_config_error:
self.already_raised_no_config_error = True
return fetch_config(option)
def finalize_options(self):
if self.include_dirs is None:
self.include_dirs = include_dirs
if self.library_dirs is None:
self.library_dirs = library_dirs
if self.libraries is None:
if self.get_compiler() == 'msvc':
libraries.remove('gdal')
libraries.append('gdal_i')
self.libraries = libraries
build_ext.finalize_options(self)
self.include_dirs.append(self.numpy_include_dir)
if self.get_compiler() == 'msvc':
return True
self.gdaldir = self.get_gdal_config('prefix')
self.library_dirs.append(os.path.join(self.gdaldir,'lib'))
self.include_dirs.append(os.path.join(self.gdaldir,'include'))
extra_link_args = []
extra_compile_args = []
if sys.platform == 'darwin' and [int(x) for x in os.uname()[2].split('.')] >= [11, 0, 0]:
# since MacOS X 10.9, clang no longer accepts -mno-fused-madd
#extra_compile_args.append('-Qunused-arguments')
os.environ['ARCHFLAGS'] = '-Wno-error=unused-command-line-argument-hard-error-in-future'
gdal_module = Extension('osgeo._gdal',
sources=['extensions/gdal_wrap.cpp'],
extra_compile_args = extra_compile_args,
extra_link_args = extra_link_args)
gdalconst_module = Extension('osgeo._gdalconst',
sources=['extensions/gdalconst_wrap.c'],
extra_compile_args = extra_compile_args,
extra_link_args = extra_link_args)
osr_module = Extension('osgeo._osr',
sources=['extensions/osr_wrap.cpp'],
extra_compile_args = extra_compile_args,
extra_link_args = extra_link_args)
ogr_module = Extension('osgeo._ogr',
sources=['extensions/ogr_wrap.cpp'],
extra_compile_args = extra_compile_args,
extra_link_args = extra_link_args)
array_module = Extension('osgeo._gdal_array',
sources=['extensions/gdal_array_wrap.cpp'],
extra_compile_args = extra_compile_args,
extra_link_args = extra_link_args)
gnm_module = Extension('osgeo._gnm',
sources=['extensions/gnm_wrap.cpp'],
extra_compile_args = extra_compile_args,
extra_link_args = extra_link_args)
ext_modules = [gdal_module,
gdalconst_module,
osr_module,
ogr_module]
py_modules = ['gdal',
'ogr',
'osr',
'gdalconst']
if os.path.exists('setup_vars.ini'):
with open('setup_vars.ini') as f:
lines = f.readlines()
if 'GNM_ENABLED=yes' in lines or 'GNM_ENABLED=yes\n' in lines:
GNM_ENABLED = True
if GNM_ENABLED:
ext_modules.append(gnm_module)
py_modules.append('gnm')
if HAVE_NUMPY:
ext_modules.append(array_module)
py_modules.append('gdalnumeric')
packages = ["osgeo",]
readme = str(open('README.rst','rb').read())
name = 'GDAL'
version = gdal_version
author = "Frank Warmerdam"
author_email = "[email protected]"
maintainer = "Howard Butler"
maintainer_email = "[email protected]"
description = "GDAL: Geospatial Data Abstraction Library"
license = "MIT"
url="http://www.gdal.org"
classifiers = [
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 3',
'Programming Language :: C',
'Programming Language :: C++',
'Topic :: Scientific/Engineering :: GIS',
'Topic :: Scientific/Engineering :: Information Analysis',
]
if BUILD_FOR_CHEESESHOP:
data_files = [("osgeo/data/gdal", glob(os.path.join("../../data", "*")))]
else:
data_files = None
exclude_package_data = {'':['GNUmakefile']}
# Copy gdal/proj data.
copy_data_tree('/usr/local/share/gdal', 'osgeo/gdal_data')
copy_data_tree('/usr/local/share/proj', 'osgeo/proj_data')
if HAVE_SETUPTOOLS:
setup( name = name,
version = gdal_version,
author = author,
author_email = author_email,
maintainer = maintainer,
maintainer_email = maintainer_email,
long_description = readme,
description = description,
license = license,
classifiers = classifiers,
py_modules = py_modules,
packages = packages,
url=url,
data_files = data_files,
zip_safe = False,
exclude_package_data = exclude_package_data,
cmdclass={'build_ext':gdal_ext},
ext_modules = ext_modules,
install_requires=['numpy=={}'.format(numpy.__version__)],
package_data={'osgeo': ['gdal_data/*', 'proj_data/*']},
**extra )
else:
setup( name = name,
version = gdal_version,
author = author,
author_email = author_email,
maintainer = maintainer,
maintainer_email = maintainer_email,
long_description = readme,
description = description,
license = license,
classifiers = classifiers,
py_modules = py_modules,
packages = packages,
data_files = data_files,
url=url,
cmdclass={'build_ext':gdal_ext,
'build_py': build_py,
'build_scripts': build_scripts},
ext_modules = ext_modules )