708 lines
37 KiB
Python
708 lines
37 KiB
Python
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
import os
|
|
import sys
|
|
|
|
from spack.package import *
|
|
from spack.util.environment import filter_system_paths
|
|
|
|
|
|
class Gdal(CMakePackage):
|
|
"""GDAL: Geospatial Data Abstraction Library.
|
|
|
|
GDAL is a translator library for raster and vector geospatial data formats that
|
|
is released under an MIT style Open Source License by the Open Source Geospatial
|
|
Foundation. As a library, it presents a single raster abstract data model and
|
|
single vector abstract data model to the calling application for all supported
|
|
formats. It also comes with a variety of useful command line utilities for data
|
|
translation and processing.
|
|
"""
|
|
|
|
homepage = "https://www.gdal.org/"
|
|
url = "https://download.osgeo.org/gdal/3.2.0/gdal-3.2.0.tar.xz"
|
|
list_url = "https://download.osgeo.org/gdal/"
|
|
list_depth = 1
|
|
|
|
maintainers = ['adamjstewart']
|
|
|
|
version('3.5.1', sha256='d12c30a9eacdeaab493c0d1c9f88eb337c9cbb5bb40744c751bdd5a5af166ab6')
|
|
version('3.5.0', sha256='d49121e5348a51659807be4fb866aa840f8dbec4d1acba6d17fdefa72125bfc9')
|
|
version('3.4.3', sha256='02a27b35899e1c4c3bcb6007da900128ddd7e8ab7cd6ccfecf338a301eadad5a')
|
|
version('3.4.2', sha256='16baf03dfccf9e3f72bb2e15cd2d5b3f4be0437cdff8a785bceab0c7be557335')
|
|
version('3.4.1', sha256='332f053516ca45101ef0f7fa96309b64242688a8024780a5d93be0230e42173d')
|
|
version('3.4.0', sha256='ac7bd2bb9436f3fc38bc7309704672980f82d64b4d57627d27849259b8f71d5c')
|
|
version('3.3.3', sha256='1e8fc8b19c77238c7f4c27857d04857b65d8b7e8050d3aac256d70fa48a21e76')
|
|
version('3.3.2', sha256='630e34141cf398c3078d7d8f08bb44e804c65bbf09807b3610dcbfbc37115cc3')
|
|
version('3.3.1', sha256='48ab00b77d49f08cf66c60ccce55abb6455c3079f545e60c90ee7ce857bccb70')
|
|
version('3.3.0', sha256='190c8f4b56afc767f43836b2a5cd53cc52ee7fdc25eb78c6079c5a244e28efa7')
|
|
version('3.2.3', sha256='d9ec8458fe97fd02bf36379e7f63eaafce1005eeb60e329ed25bb2d2a17a796f')
|
|
version('3.2.2', sha256='a7e1e414e5c405af48982bf4724a3da64a05770254f2ce8affb5f58a7604ca57')
|
|
version('3.2.1', sha256='6c588b58fcb63ff3f288eb9f02d76791c0955ba9210d98c3abd879c770ae28ea')
|
|
version('3.2.0', sha256='b051f852600ffdf07e337a7f15673da23f9201a9dbb482bd513756a3e5a196a6')
|
|
version('3.1.4', sha256='7b82486f71c71cec61f9b237116212ce18ef6b90f068cbbf9f7de4fc50b576a8')
|
|
version('3.1.3', sha256='161cf55371a143826f1d76ce566db1f0a666496eeb4371aed78b1642f219d51d')
|
|
version('3.1.2', sha256='767c8d0dfa20ba3283de05d23a1d1c03a7e805d0ce2936beaff0bb7d11450641')
|
|
version('3.1.1', sha256='97154a606339a6c1d87c80fb354d7456fe49828b2ef9a3bc9ed91771a03d2a04')
|
|
version('3.1.0', sha256='e754a22242ccbec731aacdb2333b567d4c95b9b02d3ba1ea12f70508d244fcda')
|
|
version('3.0.4', sha256='5569a4daa1abcbba47a9d535172fc335194d9214fdb96cd0f139bb57329ae277')
|
|
version('3.0.3', sha256='e20add5802265159366f197a8bb354899e1693eab8dbba2208de14a457566109')
|
|
version('3.0.2', sha256='c3765371ce391715c8f28bd6defbc70b57aa43341f6e94605f04fe3c92468983')
|
|
version('3.0.1', sha256='45b4ae25dbd87282d589eca76481c426f72132d7a599556470d5c38263b09266')
|
|
version('3.0.0', sha256='ad316fa052d94d9606e90b20a514b92b2dd64e3142dfdbd8f10981a5fcd5c43e')
|
|
version('2.4.4', sha256='a383bd3cf555d6e1169666b01b5b3025b2722ed39e834f1b65090f604405dcd8')
|
|
version('2.4.3', sha256='d52dc3e0cff3af3e898d887c4151442989f416e839948e73f0994f0224bbff60')
|
|
version('2.4.2', sha256='dcc132e469c5eb76fa4aaff238d32e45a5d947dc5b6c801a123b70045b618e0c')
|
|
version('2.4.1', sha256='fd51b4900b2fc49b98d8714f55fc8a78ebfd07218357f93fb796791115a5a1ad')
|
|
version('2.4.0', sha256='c3791dcc6d37e59f6efa86e2df2a55a4485237b0a48e330ae08949f0cdf00f27')
|
|
version('2.3.3', sha256='c3635e41766a648f945d235b922e3c5306e26a2ee5bbd730d2181e242f5f46fe')
|
|
version('2.3.2', sha256='3f6d78fe8807d1d6afb7bed27394f19467840a82bc36d65e66316fa0aa9d32a4')
|
|
version('2.3.1', sha256='9c4625c45a3ee7e49a604ef221778983dd9fd8104922a87f20b99d9bedb7725a')
|
|
version('2.3.0', sha256='6f75e49aa30de140525ccb58688667efe3a2d770576feb7fbc91023b7f552aa2')
|
|
version('2.2.4', sha256='441eb1d1acb35238ca43a1a0a649493fc91fdcbab231d0747e9d462eea192278')
|
|
version('2.2.3', sha256='a328d63d476b3653f5a25b5f7971e87a15cdf8860ab0729d4b1157ba988b8d0b')
|
|
version('2.2.2', sha256='eb25d6ee85f4f5ac1d5581958f8c6eed9b1d50746f82866fe92e507541def35b')
|
|
version('2.2.1', sha256='927098d54083ac919a497f787b835b099e9a194f2e5444dbff901f7426b86066')
|
|
version('2.2.0', sha256='0d4c326862e0f118e17418c042c2bcd037b25abd3fb198e1fc5d40b11a9fc8ea')
|
|
version('2.1.4', sha256='e06a7ae4c4ed2fd678cd045ff50a10ff5002f3b81cdfcd8ab03c39ce962d9b63')
|
|
version('2.1.3', sha256='b489793627e6cb8d2ff8d7737b61daf58382fe189fae4c581ddfd48c04b49005')
|
|
version('2.1.2', sha256='b597f36bd29a2b4368998ddd32b28c8cdf3c8192237a81b99af83cc17d7fa374')
|
|
version('2.1.1', sha256='87ce516ce757ad1edf1e21f007fbe232ed2e932af422e9893f40199711c41f92')
|
|
version('2.1.0', sha256='568b43441955b306364fcf97fb47d4c1512ac6f2f5f76b2ec39a890d2418ee03')
|
|
version('2.0.3', sha256='3c6c5ade299c7a52fc9c5d2111110c97032e1f0c2593ce6091c364b1a43b442a')
|
|
version('2.0.2', sha256='90f838853cc1c07e55893483faa7e923e4b4b1659c6bc9df3538366030a7e622')
|
|
version('2.0.1', sha256='2564c91ed8ed36274ee31002a25798f5babc4221e879cb5013867733d80f9920')
|
|
version('2.0.0', sha256='91704fafeea2349c5e268dc1e2d03921b3aae64b05ee01d59fdfc1a6b0ffc061')
|
|
|
|
# Optional dependencies
|
|
variant('armadillo', default=False, description='Speed up computations related to the Thin Plate Spline transformer')
|
|
variant('arrow', default=False, when='@3.5:', description='Required for Arrow driver')
|
|
variant('blosc', default=False, when='@3.4:', description='Required for Zarr driver')
|
|
variant('brunsli', default=True, when='@3.4:', description='Required for MRF driver')
|
|
variant('bsb', default=False, when='@:2', description='Required for BSB driver')
|
|
variant('cfitsio', default=False, description='Required for FITS driver')
|
|
variant('crnlib', default=False, description='Required for DDS driver')
|
|
variant('curl', default=False, description='Required for network access')
|
|
variant('cryptopp', default=False, when='@2.1:', description='Required for EEDAI driver')
|
|
variant('deflate', default=False, when='@3.2:', description='Required for Deflate compression')
|
|
variant('dods', default=False, when='@:3.4', description='Required for DODS driver')
|
|
variant('ecw', default=False, description='Required for ECW driver')
|
|
variant('epsilon', default=False, when='@:3.2', description='Required for EPSILON driver')
|
|
variant('expat', default=True, description='Required for XML parsing in many OGR drivers')
|
|
variant('filegdb', default=False, description='Required for FileGDB driver')
|
|
variant('fme', default=False, when='@:3.4', description='Required for FME driver')
|
|
variant('freexl', default=False, description='Required for XLS driver')
|
|
variant('fyba', default=False, description='Required for SOSI driver')
|
|
variant('geos', default=True, description='Required for geometry processing operations in OGR')
|
|
variant('gif', default=False, description='Required for GIF driver')
|
|
variant('grass', default=False, when='@:3.4', description='Required for GRASS driver')
|
|
variant('grib', default=False, when='@:2', description='Required for GRIB driver')
|
|
variant('gta', default=False, description='Required for GTA driver')
|
|
variant('heif', default=False, when='@3.2:', description='Required for HEIF driver')
|
|
variant('hdf4', default=False, description='Required for HDF4 driver')
|
|
variant('hdf5', default=False, description='Required for HDF5, BAG, and KEA drivers')
|
|
variant('hdfs', default=False, when='@2.4:', description='Required for Hadoop filesystem support')
|
|
variant('iconv', default=False, description='Required for text encoding conversion')
|
|
variant('idb', default=False, description='Required for IDB driver')
|
|
variant('ingres', default=False, when='@:3.4', description='Required for Ingres driver')
|
|
variant('jasper', default=False, when='@:3.4', description='Optional JPEG-200 library')
|
|
variant('jpeg', default=True, description='Required for JPEG driver')
|
|
variant('jxl', default=False, when='@3.4:', description='Required for JPEGXL driver')
|
|
variant('kdu', default=False, description='Required for JP2KAK and JPIPKAK drivers')
|
|
variant('kea', default=False, description='Required for KEA driver')
|
|
variant('lerc', default=True, when='@2.4:', description='Required for LERC compression')
|
|
variant('libcsf', default=False, description='Required for PCRaster driver')
|
|
variant('libkml', default=False, description='Required for LIBKML driver')
|
|
variant('liblzma', default=False, description='Required for Zarr driver')
|
|
variant('libxml2', default=False, description='Required for XML validation in many OGR drivers')
|
|
variant('luratech', default=False, when='@2.2:', description='Required for JP2Lura driver')
|
|
variant('lz4', default=False, when='@3.4:', description='Required for Zarr driver')
|
|
variant('mdb', default=False, when='@:3.4', description='Required for MDB driver')
|
|
variant('mongocxx', default=False, when='@2.1:', description='Required for MongoDBv3 driver')
|
|
variant('mrf', default=False, when='@2.1:2', description='Required for MRF driver')
|
|
variant('mrsid', default=False, description='Required for MrSID driver')
|
|
variant('mrsid_lidar', default=False, when='@:3.4', description='Required for MrSID/MG4 driver')
|
|
variant('mssql_ncli', default=False, when='@3.5:', description='Required for MSSQLSpatial driver')
|
|
variant('mssql_odbc', default=False, when='@3.5:', description='Required for MSSQLSpatial driver')
|
|
variant('mysql', default=False, description='Required for MySQL driver')
|
|
variant('netcdf', default=False, description='Required for NetCDF driver')
|
|
variant('odbc', default=False, description='Required for many OGR drivers')
|
|
variant('odbccpp', default=False, when='@3.5:', description='Required for SAP HANA driver')
|
|
variant('ogdi', default=False, description='Required for OGDI driver')
|
|
variant('opencad', default=False, when='@3.5:', description='Required for CAD driver')
|
|
variant('opencl', default=False, description='Required to accelerate warping computations')
|
|
variant('openexr', default=False, when='@3.1:', description='Required for EXR driver')
|
|
variant('openjpeg', default=False, description='Required for JP2OpenJPEG driver')
|
|
variant('openssl', default=False, when='@2.3:', description='Required for EEDAI driver')
|
|
variant('oracle', default=False, description='Required for OCI and GeoRaster drivers')
|
|
variant('parquet', default=False, when='@3.5:', description='Required for Parquet driver')
|
|
variant('pcidsk', default=False, description='Required for PCIDSK driver')
|
|
variant('pcre', default=False, description='Required for REGEXP operator in drivers using SQLite3')
|
|
variant('pdfium', default=False, when='@2.1:', description='Possible backend for PDF driver')
|
|
variant('png', default=True, description='Required for PNG driver')
|
|
variant('podofo', default=False, description='Possible backend for PDF driver')
|
|
variant('poppler', default=False, description='Possible backend for PDF driver')
|
|
variant('postgresql', default=False, description='Required for PostgreSQL and PostGISRaster drivers')
|
|
variant('qhull', default=True, when='@2.1:', description='Used for linear interpolation of gdal_grid')
|
|
variant('rasdaman', default=False, description='Required for Rasdaman driver')
|
|
variant('rasterlite2', default=False, when='@2.2:', description='Required for RasterLite2 driver')
|
|
variant('rdb', default=False, when='@3.1:', description='Required for RDB driver')
|
|
variant('sde', default=False, when='@:3.1', description='Required for SDE driver')
|
|
variant('sfcgal', default=False, when='@2.2:', description='Provides 3D geometry operations')
|
|
variant('spatialite', default=False, description='Required for SQLite and GPKG drivers')
|
|
variant('sqlite3', default=True, description='Required for SQLite and GPKG drivers')
|
|
variant('teigha', default=False, description='Required for DWG and DGNv8 drivers')
|
|
variant('tiledb', default=False, when='@3:', description='Required for TileDB driver')
|
|
variant('webp', default=False, description='Required for WEBP driver')
|
|
variant('xercesc', default=False, description='Required for XML parsing capabilities in many OGR drivers')
|
|
variant('zstd', default=False, when='@2.3:', description='Required for Zarr driver')
|
|
|
|
# Language bindings
|
|
variant('python', default=False, description='Build Python bindings')
|
|
variant('java', default=False, description='Build Java bindings')
|
|
variant('csharp', default=False, when='@3.5:', description='Build C# bindings')
|
|
variant('perl', default=False, when='@:3.4', description='Build Perl bindings')
|
|
variant('php', default=False, when='@:2.3', description='Build PHP bindings')
|
|
|
|
# Required dependencies
|
|
depends_on('cmake@3.9:', when='@3.5:', type='build')
|
|
depends_on('ninja', when='@3.5:', type='build')
|
|
depends_on('gmake', when='@:3.4', type='build')
|
|
depends_on('pkgconfig@0.25:', type='build')
|
|
depends_on('proj@6:', when='@3:')
|
|
depends_on('proj@:6', when='@2.5:2')
|
|
depends_on('proj@:5', when='@2.4')
|
|
depends_on('proj@:4', when='@:2.3')
|
|
depends_on('zlib')
|
|
depends_on('libtiff@4:', when='@3:')
|
|
depends_on('libtiff@3.6.0:') # 3.9.0+ needed to pass testsuite
|
|
depends_on('libgeotiff@1.5:', when='@3:')
|
|
depends_on('libgeotiff@1.2.1:1.5', when='@2.4.1:2')
|
|
depends_on('libgeotiff@1.2.1:1.4', when='@:2.4.0')
|
|
depends_on('json-c')
|
|
depends_on('json-c@0.12.1', when='@:2.2')
|
|
|
|
# Optional dependencies
|
|
depends_on('armadillo', when='+armadillo')
|
|
depends_on('blas', when='+armadillo')
|
|
depends_on('lapack', when='+armadillo')
|
|
depends_on('arrow', when='+arrow')
|
|
depends_on('c-blosc', when='+blosc')
|
|
depends_on('brunsli', when='+brunsli')
|
|
# depends_on('bsb', when='+bdb')
|
|
depends_on('cfitsio', when='+cfitsio')
|
|
# depends_on('crunch', when='+crnlib')
|
|
depends_on('curl', when='+curl')
|
|
depends_on('cryptopp', when='+cryptopp')
|
|
depends_on('libdeflate', when='+deflate')
|
|
# depends_on('dods', when='+dods')
|
|
# depends_on('ecw', when='+ecw')
|
|
# depends_on('libepsilon', when='+epsilon')
|
|
depends_on('expat@1.95:', when='+expat')
|
|
# depends_on('filegdb', when='+filegdb')
|
|
# depends_on('fme', when='+fme')
|
|
depends_on('freexl', when='+freexl')
|
|
depends_on('fyba', when='+fyba')
|
|
depends_on('geos@3.1:', when='+geos')
|
|
depends_on('giflib', when='+gif')
|
|
depends_on('grass@5.7:', when='+grass')
|
|
depends_on('grib-api', when='+grib')
|
|
# depends_on('gta', when='+gta')
|
|
# depends_on('heif@1.1:', when='+heif')
|
|
depends_on('hdf', when='+hdf4')
|
|
depends_on('hdf5+cxx', when='+hdf5')
|
|
depends_on('hdf5@:1.12', when='@:3.4.1 +hdf5')
|
|
depends_on('hadoop', when='+hdfs')
|
|
depends_on('iconv', when='+iconv')
|
|
# depends_on('idb', when='+idb')
|
|
# depends_on('ingres', when='+ingres')
|
|
depends_on('jasper@1.900.1', patches=[patch('uuid.patch')], when='+jasper')
|
|
depends_on('jpeg', when='+jpeg')
|
|
# depends_on('libjxl', when='+jxl')
|
|
# depends_on('kakadu', when='+kdu')
|
|
depends_on('kealib', when='+kea')
|
|
depends_on('lerc', when='+lerc')
|
|
# depends_on('libcsf', when='+libcsf')
|
|
depends_on('libkml@1.3:', when='+libkml')
|
|
depends_on('xz', when='+liblzma')
|
|
depends_on('libxml2', when='+libxml2')
|
|
# depends_on('luratech', when='+luratech')
|
|
depends_on('lz4', when='+lz4')
|
|
depends_on('jackcess@1.2', type='run', when='+mdb')
|
|
depends_on('mongo-cxx-driver', when='+mongocxx')
|
|
# depends_on('bsoncxx', when='+mongocxx')
|
|
# depends_on('mrf', when='+mrf')
|
|
# depends_on('mrsid', when='+mrsid')
|
|
# depends_on('lizardtech-lidar', when='+mrsid_lidar')
|
|
# depends_on('mssql_ncli', when='+mssql_ncli')
|
|
# depends_on('mssql_odbc', when='+mssql_odbc')
|
|
depends_on('mysql', when='+mysql')
|
|
depends_on('netcdf-c', when='+netcdf')
|
|
depends_on('unixodbc', when='+odbc')
|
|
# depends_on('odbc-cpp-wrapper', when='+odbccpp')
|
|
# depends_on('ogdi', when='+ogdi')
|
|
# depends_on('lib-opencad', when='+opencad')
|
|
depends_on('opencl', when='+opencl')
|
|
depends_on('openexr@2.2:', when='+openexr')
|
|
depends_on('openjpeg', when='+openjpeg')
|
|
depends_on('openssl', when='+openssl')
|
|
depends_on('oracle-instant-client', when='+oracle')
|
|
depends_on('parquet-cpp', when='+parquet')
|
|
# depends_on('pcidsk', when='+pcidsk')
|
|
depends_on('pcre2', when='@3.5:+pcre')
|
|
depends_on('pcre', when='@:3.4+pcre')
|
|
# depends_on('pdfium', when='+pdfium')
|
|
depends_on('libpng', when='+png')
|
|
# depends_on('podofo', when='+podofo')
|
|
depends_on('poppler', when='+poppler')
|
|
depends_on('poppler@0.24:', when='@3: +poppler')
|
|
depends_on('poppler@:0.63', when='@:2.3 +poppler')
|
|
depends_on('poppler@:0.71', when='@:2.4 +poppler')
|
|
depends_on('poppler@:21', when='@:3.4.1 +poppler')
|
|
depends_on('postgresql', when='+postgresql')
|
|
depends_on('qhull', when='+qhull')
|
|
depends_on('qhull@2015:', when='@3.5:+qhull')
|
|
depends_on('qhull@:2020.1', when='@:3.3+qhull')
|
|
# depends_on('rasdaman', when='+rasdaman')
|
|
# depends_on('rasterlite2@1.1:', when='+rasterlite2')
|
|
# depends_on('rdblib', when='+rdb')
|
|
# depends_on('sde', when='+sde')
|
|
depends_on('sfcgal', when='+sfcgal')
|
|
depends_on('libspatialite', when='+spatialite')
|
|
depends_on('sqlite@3:', when='+sqlite3')
|
|
# depends_on('teigha', when='+teigha')
|
|
# depends_on('tiledb', when='+tiledb')
|
|
depends_on('libwebp', when='+webp')
|
|
depends_on('xerces-c@3.1:', when='+xercesc')
|
|
depends_on('zstd', when='+zstd')
|
|
|
|
# Language bindings
|
|
# FIXME: Allow packages to extend multiple packages
|
|
# See https://github.com/spack/spack/issues/987
|
|
extends('python', when='+python')
|
|
# extends('openjdk', when='+java')
|
|
# extends('perl', when='+perl')
|
|
|
|
# see gdal_version_and_min_supported_python_version
|
|
# in swig/python/osgeo/__init__.py
|
|
depends_on('python@3.6:', type=('build', 'link', 'run'), when='@3.3:+python')
|
|
depends_on('python@2.0:', type=('build', 'link', 'run'), when='@3.2:+python')
|
|
depends_on('python', type=('build', 'link', 'run'), when='+python')
|
|
# swig/python/setup.py
|
|
depends_on('py-setuptools@:57', type='build', when='@:3.2+python') # needs 2to3
|
|
depends_on('py-setuptools', type='build', when='+python')
|
|
depends_on('py-numpy@1.0.0:', type=('build', 'run'), when='+python')
|
|
depends_on('swig', type='build', when='+python')
|
|
depends_on('java@7:', type=('build', 'link', 'run'), when='@3.2:+java')
|
|
depends_on('java@6:', type=('build', 'link', 'run'), when='@2.4:+java')
|
|
depends_on('java@5:', type=('build', 'link', 'run'), when='@2.1:+java')
|
|
depends_on('java@4:', type=('build', 'link', 'run'), when='@:2.0+java')
|
|
depends_on('ant', type='build', when='+java')
|
|
depends_on('swig', type='build', when='+java')
|
|
depends_on('perl', type=('build', 'run'), when='+perl')
|
|
depends_on('swig', type='build', when='+perl')
|
|
depends_on('php', type=('build', 'link', 'run'), when='+php')
|
|
depends_on('swig', type='build', when='+php')
|
|
|
|
# https://trac.osgeo.org/gdal/wiki/SupportedCompilers
|
|
msg = 'GDAL requires C++11 support'
|
|
conflicts('%gcc@:4.8.0', msg=msg)
|
|
conflicts('%clang@:3.2', msg=msg)
|
|
conflicts('%intel@:12', msg=msg)
|
|
conflicts('%xl@:13.0', msg=msg)
|
|
conflicts('%xl_r@:13.0', msg=msg)
|
|
|
|
# https://github.com/OSGeo/gdal/issues/5994
|
|
conflicts('~png', when='@3:3.5.0')
|
|
conflicts('~jpeg', when='@3:3.5.0')
|
|
# TODO: investigate build issues
|
|
conflicts('+brunsli', when='@3.4')
|
|
conflicts('+qhull', when='@2.1')
|
|
conflicts('+mdb', when='~java', msg='MDB driver requires Java')
|
|
|
|
# TODO: add packages for the following dependencies
|
|
conflicts('+bsb')
|
|
conflicts('+crnlib')
|
|
conflicts('+dods')
|
|
conflicts('+ecw')
|
|
conflicts('+epsilon')
|
|
conflicts('+filegdb')
|
|
conflicts('+fme')
|
|
conflicts('+gta')
|
|
conflicts('+heif')
|
|
conflicts('+idb')
|
|
conflicts('+ingres')
|
|
conflicts('+jxl')
|
|
conflicts('+kdu')
|
|
conflicts('+libcsf')
|
|
conflicts('+luratech')
|
|
conflicts('+mrf')
|
|
conflicts('+mrsid')
|
|
conflicts('+mrsid_lidar')
|
|
conflicts('+mssql_ncli')
|
|
conflicts('+mssql_odbc')
|
|
conflicts('+odbccpp')
|
|
conflicts('+ogdi')
|
|
conflicts('+opencad')
|
|
conflicts('+pcidsk')
|
|
conflicts('+pdfium')
|
|
conflicts('+podofo')
|
|
conflicts('+rasdaman')
|
|
conflicts('+rasterlite2')
|
|
conflicts('+rdb')
|
|
conflicts('+sde')
|
|
conflicts('+teigha')
|
|
conflicts('+tiledb')
|
|
|
|
# https://github.com/OSGeo/gdal/issues/3782
|
|
patch('https://github.com/OSGeo/gdal/pull/3786.patch?full_index=1', when='@3.3.0', level=2,
|
|
sha256='9f9824296e75b34b3e78284ec772a5ac8f8ba92c17253ea9ca242caf766767ce')
|
|
|
|
generator = 'Ninja'
|
|
executables = ['^gdal-config$']
|
|
|
|
@classmethod
|
|
def determine_version(cls, exe):
|
|
return Executable(exe)('--version', output=str, error=str).rstrip()
|
|
|
|
@property
|
|
def import_modules(self):
|
|
modules = ['osgeo']
|
|
if self.spec.satisfies('@3.3:'):
|
|
modules.append('osgeo_utils')
|
|
else:
|
|
modules.append('osgeo.utils')
|
|
return modules
|
|
|
|
@when('@:3.4')
|
|
def setup_build_environment(self, env):
|
|
# Needed to install Python bindings to GDAL installation
|
|
# prefix instead of Python installation prefix.
|
|
# See swig/python/GNUmakefile for more details.
|
|
env.set('PREFIX', self.prefix)
|
|
env.set('DESTDIR', '/')
|
|
|
|
def setup_run_environment(self, env):
|
|
if '+java' in self.spec:
|
|
class_paths = find(self.prefix, '*.jar')
|
|
classpath = os.pathsep.join(class_paths)
|
|
env.prepend_path('CLASSPATH', classpath)
|
|
|
|
# `spack test run gdal+python` requires these for the Python bindings
|
|
# to find the correct libraries
|
|
libs = []
|
|
for dep in self.spec.dependencies(deptype='link'):
|
|
query = self.spec[dep.name]
|
|
libs.extend(filter_system_paths(query.libs.directories))
|
|
if sys.platform == 'darwin':
|
|
env.prepend_path('DYLD_FALLBACK_LIBRARY_PATH', ':'.join(libs))
|
|
else:
|
|
env.prepend_path('LD_LIBRARY_PATH', ':'.join(libs))
|
|
|
|
def patch(self):
|
|
if '+java platform=darwin' in self.spec:
|
|
filter_file('linux', 'darwin', 'swig/java/java.opt', string=True)
|
|
|
|
def cmake_args(self):
|
|
# https://gdal.org/build_hints.html
|
|
args = [
|
|
# Only use Spack-installed dependencies
|
|
self.define('GDAL_USE_EXTERNAL_LIBS', False),
|
|
self.define('GDAL_USE_INTERNAL_LIBS', False),
|
|
|
|
# Required dependencies
|
|
self.define('GDAL_USE_GEOTIFF', True),
|
|
self.define('GDAL_USE_JSONC', True),
|
|
self.define('GDAL_USE_TIFF', True),
|
|
self.define('GDAL_USE_ZLIB', True),
|
|
|
|
# Optional dependencies
|
|
self.define_from_variant('GDAL_USE_ARMADILLO', 'armadillo'),
|
|
self.define_from_variant('GDAL_USE_ARROW', 'arrow'),
|
|
self.define_from_variant('GDAL_USE_BLOSC', 'blosc'),
|
|
self.define_from_variant('GDAL_USE_BRUNSLI', 'brunsli'),
|
|
self.define_from_variant('GDAL_USE_CFITSIO', 'cfitsio'),
|
|
self.define_from_variant('GDAL_USE_CRNLIB', 'crnlib'),
|
|
self.define_from_variant('GDAL_USE_CRYPTOPP', 'cryptopp'),
|
|
self.define_from_variant('GDAL_USE_CURL', 'curl'),
|
|
self.define_from_variant('GDAL_USE_DEFLATE', 'deflate'),
|
|
self.define_from_variant('GDAL_USE_ECW', 'ecw'),
|
|
self.define_from_variant('GDAL_USE_EXPAT', 'expat'),
|
|
self.define_from_variant('GDAL_USE_FILEGDB', 'filegdb'),
|
|
self.define_from_variant('GDAL_USE_FREEXL', 'freexl'),
|
|
self.define_from_variant('GDAL_USE_FYBA', 'fyba'),
|
|
self.define_from_variant('GDAL_USE_GEOS', 'geos'),
|
|
self.define_from_variant('GDAL_USE_GIF', 'gif'),
|
|
self.define_from_variant('GDAL_USE_GTA', 'gta'),
|
|
self.define_from_variant('GDAL_USE_HEIF', 'heif'),
|
|
self.define_from_variant('GDAL_USE_HDF4', 'hdf4'),
|
|
self.define_from_variant('GDAL_USE_HDF5', 'hdf5'),
|
|
self.define_from_variant('GDAL_USE_HDFS', 'hdfs'),
|
|
self.define_from_variant('GDAL_USE_ICONV', 'iconv'),
|
|
self.define_from_variant('GDAL_USE_IDB', 'idb'),
|
|
self.define_from_variant('GDAL_USE_JPEG', 'jpeg'),
|
|
self.define_from_variant('GDAL_USE_JXL', 'jxl'),
|
|
self.define_from_variant('GDAL_USE_KDU', 'kdu'),
|
|
self.define_from_variant('GDAL_USE_KEA', 'kea'),
|
|
self.define_from_variant('GDAL_USE_LERC', 'lerc'),
|
|
self.define_from_variant('GDAL_USE_LIBCSF', 'libcsf'),
|
|
self.define_from_variant('GDAL_USE_LIBKML', 'libkml'),
|
|
self.define_from_variant('GDAL_USE_LIBLZMA', 'liblzma'),
|
|
self.define_from_variant('GDAL_USE_LIBXML2', 'libxml2'),
|
|
self.define_from_variant('GDAL_USE_LURATECH', 'luratech'),
|
|
self.define_from_variant('GDAL_USE_LZ4', 'lz4'),
|
|
self.define_from_variant('GDAL_USE_MONGOCXX', 'mongocxx'),
|
|
self.define_from_variant('GDAL_USE_MRSID', 'mrsid'),
|
|
self.define_from_variant('GDAL_USE_MSSQL_NCLI', 'mssql_ncli'),
|
|
self.define_from_variant('GDAL_USE_MSSQL_ODBC', 'mssql_odbc'),
|
|
self.define_from_variant('GDAL_USE_MYSQL', 'mysql'),
|
|
self.define_from_variant('GDAL_USE_NETCDF', 'netcdf'),
|
|
self.define_from_variant('GDAL_USE_ODBC', 'odbc'),
|
|
self.define_from_variant('GDAL_USE_ODBCCPP', 'odbccpp'),
|
|
self.define_from_variant('GDAL_USE_OGDI', 'ogdi'),
|
|
self.define_from_variant('GDAL_USE_OPENCAD', 'opencad'),
|
|
self.define_from_variant('GDAL_USE_OPENCL', 'opencl'),
|
|
self.define_from_variant('GDAL_USE_OPENEXR', 'openexr'),
|
|
self.define_from_variant('GDAL_USE_OPENJPEG', 'openjpeg'),
|
|
self.define_from_variant('GDAL_USE_OPENSSL', 'openssl'),
|
|
self.define_from_variant('GDAL_USE_ORACLE', 'oracle'),
|
|
self.define_from_variant('GDAL_USE_PARQUET', 'parquet'),
|
|
self.define_from_variant('GDAL_USE_PCRE2', 'pcre'),
|
|
self.define_from_variant('GDAL_USE_PDFIUM', 'pdfium'),
|
|
self.define_from_variant('GDAL_USE_PNG', 'png'),
|
|
self.define_from_variant('GDAL_USE_PODOFO', 'podofo'),
|
|
self.define_from_variant('GDAL_USE_POPPLER', 'poppler'),
|
|
self.define_from_variant('GDAL_USE_POSTGRESQL', 'postgresql'),
|
|
self.define_from_variant('GDAL_USE_QHULL', 'qhull'),
|
|
self.define_from_variant('GDAL_USE_RASDAMAN', 'rasdaman'),
|
|
self.define_from_variant('GDAL_USE_RASTERLITE2', 'rasterlite2'),
|
|
self.define_from_variant('GDAL_USE_RDB', 'rdb'),
|
|
self.define_from_variant('GDAL_USE_SFCGAL', 'sfcgal'),
|
|
self.define_from_variant('GDAL_USE_SPATIALITE', 'spatialite'),
|
|
self.define_from_variant('GDAL_USE_SQLITE3', 'sqlite3'),
|
|
self.define_from_variant('GDAL_USE_TEIGHA', 'teigha'),
|
|
self.define_from_variant('GDAL_USE_TILEDB', 'tiledb'),
|
|
self.define_from_variant('GDAL_USE_WEBP', 'webp'),
|
|
self.define_from_variant('GDAL_USE_XERCESC', 'xercesc'),
|
|
self.define_from_variant('GDAL_USE_ZSTD', 'zstd'),
|
|
|
|
# Language bindings
|
|
self.define_from_variant('BUILD_PYTHON_BINDINGS', 'python'),
|
|
self.define_from_variant('BUILD_JAVA_BINDINGS', 'java'),
|
|
self.define_from_variant('BUILD_CSHARP_BINDINGS', 'csharp'),
|
|
]
|
|
|
|
# Remove empty strings
|
|
args = [arg for arg in args if arg]
|
|
|
|
return args
|
|
|
|
def with_or_without(self, name, variant=None, package=None, attribute=None):
|
|
if not variant:
|
|
variant = name
|
|
|
|
if variant not in self.variants:
|
|
msg = '"{}" is not a variant of "{}"'
|
|
raise KeyError(msg.format(variant, self.name))
|
|
|
|
if variant not in self.spec.variants:
|
|
return ''
|
|
|
|
if self.spec.variants[variant].value:
|
|
if package:
|
|
value = self.spec[package].prefix
|
|
if attribute == 'command':
|
|
value = self.spec[package].command.path
|
|
elif attribute == 'libs':
|
|
value = self.spec[package].libs.directories[0]
|
|
return '--with-{}={}'.format(name, value)
|
|
else:
|
|
return '--with-{}'.format(name)
|
|
else:
|
|
return '--without-{}'.format(name)
|
|
|
|
def configure_args(self):
|
|
# https://trac.osgeo.org/gdal/wiki/BuildHints
|
|
args = [
|
|
'--prefix={}'.format(self.prefix),
|
|
|
|
# Required dependencies
|
|
'--with-geotiff={}'.format(self.spec['libgeotiff'].prefix),
|
|
'--with-libjson-c={}'.format(self.spec['json-c'].prefix),
|
|
'--with-libtiff={}'.format(self.spec['libtiff'].prefix),
|
|
'--with-libz={}'.format(self.spec['zlib'].prefix),
|
|
|
|
# Optional dependencies
|
|
self.with_or_without('armadillo', package='armadillo'),
|
|
self.with_or_without('blosc', package='c-blosc'),
|
|
self.with_or_without('brunsli'),
|
|
self.with_or_without('bsb'),
|
|
self.with_or_without('cfitsio', package='cfitsio'),
|
|
self.with_or_without('dds', variant='crnlib', package='crunch'),
|
|
self.with_or_without('curl', package='curl', attribute='command'),
|
|
self.with_or_without('cryptopp', package='cryptopp'),
|
|
self.with_or_without('libdeflate', variant='deflate', package='libdeflate'),
|
|
self.with_or_without('dods-root', variant='dods', package='dods'),
|
|
self.with_or_without('ecw', package='ecw'),
|
|
self.with_or_without('epsilon', package='libepsilon'),
|
|
self.with_or_without('expat', package='expat'),
|
|
self.with_or_without('fgdb', variant='filegdb', package='filegdb'),
|
|
self.with_or_without('fme', package='fme'),
|
|
self.with_or_without('freexl', package='freexl'),
|
|
self.with_or_without('sosi', variant='fyba', package='fyba'),
|
|
self.with_or_without('geos', package='geos', attribute='command'),
|
|
self.with_or_without('gif', package='giflib'),
|
|
self.with_or_without('grass', package='grass'),
|
|
self.with_or_without('grib'),
|
|
self.with_or_without('libgrass', variant='grass'),
|
|
self.with_or_without('gta', package='gta'),
|
|
self.with_or_without('heif'),
|
|
self.with_or_without('hdf4', package='hdf'),
|
|
self.with_or_without('hdf5', package='hdf5'),
|
|
self.with_or_without('hdfs', package='hadoop'),
|
|
self.with_or_without('libiconv-prefix', variant='iconv', package='iconv'),
|
|
self.with_or_without('idb', package='idb'),
|
|
self.with_or_without('ingres', package='ingres'),
|
|
self.with_or_without('jasper', package='jasper'),
|
|
self.with_or_without('jpeg', package='jpeg'),
|
|
self.with_or_without('jxl'),
|
|
self.with_or_without('kakadu', variant='kdu'),
|
|
self.with_or_without('kea', package='kealib', attribute='command'),
|
|
self.with_or_without('lerc', package='lerc'),
|
|
self.with_or_without('pcraster', variant='libcsf', package='libcsf'),
|
|
self.with_or_without('libkml', package='libkml'),
|
|
self.with_or_without('liblzma'),
|
|
self.with_or_without('jp2lura', variant='luratech', package='luratech'),
|
|
self.with_or_without('lz4', package='lz4'),
|
|
self.with_or_without('mdb'),
|
|
self.with_or_without('mrf'),
|
|
self.with_or_without('mrsid', package='mrsid'),
|
|
self.with_or_without('mrsid_lidar', package='lizardtech-lidar'),
|
|
self.with_or_without('mysql', package='mysql', attribute='command'),
|
|
self.with_or_without('netcdf', package='netcdf-c'),
|
|
self.with_or_without('odbc', package='unixodbc'),
|
|
self.with_or_without('hana', variant='odbccpp', package='odbc-cpp-wrapper'),
|
|
self.with_or_without('ogdi', package='ogdi'),
|
|
self.with_or_without('opencl'),
|
|
self.with_or_without('exr', variant='openexr'),
|
|
self.with_or_without('openjpeg'),
|
|
self.with_or_without('crypto', variant='openssl', package='openssl'),
|
|
self.with_or_without(
|
|
'oci', variant='oracle', package='oracle-instant-client'
|
|
),
|
|
self.with_or_without('pcidsk', package='pcidsk'),
|
|
self.with_or_without('pcre'),
|
|
self.with_or_without('pdfium', package='pdfium'),
|
|
self.with_or_without('png', package='libpng'),
|
|
self.with_or_without('podofo', package='podofo'),
|
|
self.with_or_without('poppler', package='poppler'),
|
|
self.with_or_without('qhull'),
|
|
self.with_or_without('rasdaman', package='rasdaman'),
|
|
self.with_or_without('rasterlite2', package='rasterlite2'),
|
|
self.with_or_without('rdb', package='rdb'),
|
|
self.with_or_without('sde', package='sde'),
|
|
self.with_or_without('spatialite', package='libspatialite'),
|
|
self.with_or_without('sqlite3', package='sqlite'),
|
|
self.with_or_without('sfcgal', package='sfcgal', attribute='command'),
|
|
self.with_or_without('tiledb', package='tiledb'),
|
|
self.with_or_without('webp', package='libwebp'),
|
|
self.with_or_without('xerces', variant='xercesc', package='xerces-c'),
|
|
self.with_or_without('zstd', package='zstd'),
|
|
|
|
# Language bindings
|
|
self.with_or_without('python', package='python', attribute='command'),
|
|
self.with_or_without('java', package='java'),
|
|
self.with_or_without(
|
|
'jvm-lib', variant='mdb', package='java', attribute='libs'
|
|
),
|
|
self.with_or_without('jvm-lib-add-rpath', variant='mdb'),
|
|
self.with_or_without('perl'),
|
|
self.with_or_without('php'),
|
|
]
|
|
|
|
# Renamed or modified flags
|
|
if self.spec.satisfies('@3:'):
|
|
args.extend([
|
|
self.with_or_without('xml2', variant='libxml2'),
|
|
self.with_or_without('mongocxxv3', variant='mongocxx'),
|
|
self.with_or_without('pg', variant='postgresql'),
|
|
])
|
|
else:
|
|
args.extend([
|
|
self.with_or_without(
|
|
'xml2', variant='libxml2', package='libxml2', attribute='command'
|
|
),
|
|
self.with_or_without('mongocxx', variant='mongocxx'),
|
|
self.with_or_without(
|
|
'pg', variant='postgresql',
|
|
package='postgresql', attribute='command'
|
|
),
|
|
])
|
|
|
|
if self.spec.satisfies('@2.3:'):
|
|
args.append('--with-proj={}'.format(self.spec['proj'].prefix))
|
|
|
|
if self.spec.satisfies('@2.2:'):
|
|
args.append(self.with_or_without('teigha', package='teigha'))
|
|
else:
|
|
args.append(
|
|
self.with_or_without('dwgdirect', variant='teigha', package='teigha')
|
|
)
|
|
|
|
if '+hdf4' in self.spec:
|
|
hdf4 = self.spec['hdf']
|
|
if '+external-xdr' in hdf4 and hdf4['rpc'].name != 'libc':
|
|
args.append('LIBS=' + hdf4['rpc'].libs.link_flags)
|
|
|
|
# Remove empty strings
|
|
args = [arg for arg in args if arg]
|
|
|
|
return args
|
|
|
|
@when('@:3.4')
|
|
def cmake(self, spec, prefix):
|
|
configure(*self.configure_args())
|
|
|
|
@when('@:3.4')
|
|
def build(self, spec, prefix):
|
|
# https://trac.osgeo.org/gdal/wiki/GdalOgrInJavaBuildInstructionsUnix
|
|
make()
|
|
if '+java' in spec:
|
|
with working_dir('swig/java'):
|
|
make()
|
|
|
|
@when('@:3.4')
|
|
def check(self):
|
|
# no top-level test target
|
|
if '+java' in self.spec:
|
|
with working_dir('swig/java'):
|
|
make('test')
|
|
|
|
@when('@:3.4')
|
|
def install(self, spec, prefix):
|
|
make('install')
|
|
if '+java' in spec:
|
|
with working_dir('swig/java'):
|
|
make('install')
|
|
install('*.jar', prefix)
|
|
|
|
@run_after('install')
|
|
def darwin_fix(self):
|
|
# The shared library is not installed correctly on Darwin; fix this
|
|
if self.spec.satisfies('@:3.4 platform=darwin'):
|
|
fix_darwin_install_name(self.prefix.lib)
|
|
|
|
def test(self):
|
|
"""Attempts to import modules of the installed package."""
|
|
|
|
if '+python' in self.spec:
|
|
# Make sure we are importing the installed modules,
|
|
# not the ones in the source directory
|
|
for module in self.import_modules:
|
|
self.run_test(self.spec['python'].command.path,
|
|
['-c', 'import {0}'.format(module)],
|
|
purpose='checking import of {0}'.format(module),
|
|
work_dir='spack-test')
|