spack/var/spack/repos/builtin/packages/gmt/package.py
Aiden Grossman 19c20563cc Initial License Checkin
This patch adds license information for about 5,300 packages from automated sources.
The license information was obtained from Alpine Linux and PyPI and processed
using tooling available in https://github.com/boomanaiden154/spack-license-utils.
The license field was added in after all other directives in an automated fashion.

Note that while this license information is probably fairly accurate, it is not
guaranteed to be accurate. In addition some of the license strings from Alpine Linux
might not be valid SPDX license strings. Invalid SPDX identifiers can be picked up
and fixed once we have validation/parsing infrastructure in place for the solver,
and issues can be fixed as they come up.
2023-12-27 11:20:45 -08:00

187 lines
7.0 KiB
Python

# Copyright 2013-2023 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)
from spack.build_systems.autotools import AutotoolsBuilder
from spack.build_systems.cmake import CMakeBuilder
from spack.package import *
class Gmt(CMakePackage, AutotoolsPackage):
"""GMT (Generic Mapping Tools) is an open source collection of about 80
command-line tools for manipulating geographic and Cartesian data sets
(including filtering, trend fitting, gridding, projecting, etc.) and
producing PostScript illustrations ranging from simple x-y plots via
contour maps to artificially illuminated surfaces and 3D perspective views.
"""
homepage = "https://www.generic-mapping-tools.org/"
url = "https://github.com/GenericMappingTools/gmt/archive/6.1.0.tar.gz"
git = "https://github.com/GenericMappingTools/gmt.git"
maintainers("adamjstewart")
license("LGPL-3.0-only")
version("master", branch="master")
version("6.4.0", sha256="c39d23dbc8a85416457946f6b93c2b9a5f039f092453e7f4b1aaf88d4a288300")
version("6.3.0", sha256="48712279da8228a7960f36fd4b7b04cc1a66489c37b2a5c03f8336a631aa3b24")
version("6.2.0", sha256="b70786ca5ba7d1293acc4e901a0f82e1300d368b61009ef87f771f4bc99d058a")
version("6.1.1", sha256="4cb17f42ff10b8f5fe372956c23f1fa3ca21a8e94933a6c614894f0be33427c1")
version("6.1.0", sha256="f76ad7f444d407dfd7e5762644eec3a719c6aeb06d877bf746fe51abd79b1a9e")
version("6.0.0", sha256="7a733e670f01d99f8fc0da51a4337320d764c06a68746621f83ccf2e3453bcb7")
version("5.4.4", sha256="b593dfb101e6507c467619f3d2190a9f78b09d49fe2c27799750b8c4c0cd2da0")
version(
"4.5.18",
sha256="27c30b516c317fed8e44efa84a0262f866521d80cfe76a61bf12952efb522b63",
url="ftp://ftp.soest.hawaii.edu/gmt/gmt-4.5.18-src.tar.bz2",
)
variant(
"ghostscript",
default=False,
description="Ability to convert PostScript plots to PDF and rasters",
)
variant("geos", default=False, description="Ability to buffer lines and polygons")
variant("pcre", default=False, description="Regular expression support")
variant("fftw", default=False, description="Fast FFTs")
variant("glib", default=False, description="GTHREAD support")
variant("lapack", default=False, description="Fast matrix inversion")
variant("blas", default=False, description="Fast matrix multiplications")
variant("graphicsmagick", default=False, description="Convert images to animated GIFs")
variant("ffmpeg", default=False, description="Convert images to videos")
# https://github.com/GenericMappingTools/gmt/blob/master/BUILDING.md
# Build system
build_system(
conditional("cmake", when="@5.0.1:"),
conditional("autotools", when="@:5.0.0"),
default="cmake",
)
# Required dependencies
with when("build_system=cmake"):
generator("ninja")
depends_on("cmake@2.8.12:", type="build")
depends_on("netcdf-c@4:")
depends_on("curl", when="@5.4:")
depends_on("gdal")
# Optional dependencies
depends_on("ghostscript", when="+ghostscript")
depends_on("pcre2", when="+pcre")
depends_on("fftw@3.3:", when="+fftw")
depends_on("glib@2.32:", when="+glib")
depends_on("lapack", when="+lapack")
depends_on("blas", when="+blas")
depends_on("graphicsmagick", when="+graphicsmagick")
depends_on("ffmpeg", when="+ffmpeg")
depends_on("graphicsmagick", type="test")
depends_on("py-dvc", type="test")
resource(
name="gshhg",
url="https://github.com/GenericMappingTools/gshhg-gmt/releases/download/2.3.7/gshhg-gmt-2.3.7.tar.gz",
sha256="9bb1a956fca0718c083bef842e625797535a00ce81f175df08b042c2a92cfe7f",
destination="share",
placement="gshhg",
)
resource(
name="dcw",
url="https://github.com/GenericMappingTools/dcw-gmt/releases/download/2.1.1/dcw-gmt-2.1.1.tar.gz",
sha256="d4e208dca88fbf42cba1bb440fbd96ea2f932185c86001f327ed0c7b65d27af1",
destination="share",
placement="dcw",
)
# https://github.com/spack/spack/issues/26661
conflicts(
"%gcc@11:",
when="@:5",
msg="GMT 5 cannot be built with GCC 11+, try a newer GMT or older GCC",
)
# https://github.com/GenericMappingTools/gmt/pull/3603
patch("regexp.patch", when="@6.1.0")
patch("type.patch", when="@4")
executables = ["^gmt-config$"]
@classmethod
def determine_version(cls, exe):
return Executable(exe)("--version", output=str, error=str).rstrip()
class CMakeBuilder(CMakeBuilder):
def cmake_args(self):
spec = self.spec
args = [
self.define("NETCDF_CONFIG", spec["netcdf-c"].prefix.bin.join("nc-config")),
self.define("GDAL_CONFIG", spec["gdal"].prefix.bin.join("gdal-config")),
self.define("PCRE_CONFIG", ""),
self.define("GSHHG_PATH", "gshhg"),
self.define("DCW_PATH", "dcw"),
]
if "+ghostscript" in spec:
args.append(self.define("GS", spec["ghostscript"].prefix.bin.gs))
if "+geos" in spec:
args.append(self.define("GEOS_CONFIG", spec["geos"].prefix.bin.join("geos-config")))
if "+pcre" in spec:
args.append(self.define("PCRE2_CONFIG", spec["pcre2"].prefix.bin.join("pcre2-config")))
if "+fftw" in spec:
args.extend(
[
self.define("FFTW3_INCLUDE_DIR", spec["fftw"].headers.directories[0]),
self.define("FFTW3F_LIBRARY", spec["fftw"].libs.directories[0]),
]
)
if "+glib" in spec:
args.extend(
[
self.define("GLIB_INCLUDE_DIR", spec["glib"].headers.directories[0]),
self.define("GLIB_LIBRARIES", spec["glib"].libs[0]),
]
)
if "graphicsmagick" in spec:
args.extend(
[
self.define("GM", spec["graphicsmagick"].prefix.bin.gm),
self.define("GRAPHICSMAGICK", spec["graphicsmagick"].prefix.bin.gm),
]
)
if "+ffmpeg" in spec:
args.append(self.define("FFMPEG", spec["ffmpeg"].prefix.bin.ffmpeg))
return args
class AutotoolsBuilder(AutotoolsBuilder):
def configure_args(self):
return [
"--enable-netcdf={0}".format(self.spec["netcdf-c"].prefix),
"--enable-gdal",
"--enable-shared",
"--without-x",
]
def build(self, pkg, spec, prefix):
# Building in parallel results in dozens of errors like:
# *** No rule to make target `../libgmtps.so', needed by `pssegyz'.
make(parallel=False)
def install(self, pkg, spec, prefix):
# Installing in parallel results in dozens of errors like:
# /usr/bin/install: cannot create directory '...': File exists
make("install", parallel=False)