# 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.package import * class Grass(AutotoolsPackage): """GRASS GIS (Geographic Resources Analysis Support System), is a free and open source Geographic Information System (GIS) software suite used for geospatial data management and analysis, image processing, graphics and maps production, spatial modeling, and visualization.""" homepage = "https://grass.osgeo.org" url = "https://grass.osgeo.org/grass78/source/grass-7.8.5.tar.gz" list_url = "https://grass.osgeo.org/download/software/sources/" git = "https://github.com/OSGeo/grass.git" maintainers("adamjstewart") version("master", branch="master") version("8.2.0", sha256="621c3304a563be19c0220ae28f931a5e9ba74a53218c5556cd3f7fbfcca33a80") version("7.8.5", sha256="a359bb665524ecccb643335d70f5436b1c84ffb6a0e428b78dffebacd983ff37") version("7.8.2", sha256="33576f7078f805b39ca20c2fa416ac79c64260c0581072a6dc7d813f53aa9abb") version("7.8.1", sha256="6ae578fd67afcce7abec4ba4505dcc55b3d2dfe0ca46b99d966cb148c654abb3") version("7.8.0", sha256="4b1192294e959ffd962282344e4ff325c4472f73abe605e246a1da3beda7ccfa") variant("cxx", default=True, description="Support C++ functionality") variant("tiff", default=False, description="Support TIFF functionality") variant("png", default=False, description="Support PNG functionality") variant("postgres", default=False, description="Support PostgreSQL functionality") variant("mysql", default=False, description="Support MySQL functionality") variant("sqlite", default=False, description="Support SQLite functionality") variant("opengl", default=False, description="Support OpenGL functionality") variant("odbc", default=False, description="Support ODBC functionality") variant("fftw", default=False, description="Support FFTW functionality") variant("blas", default=False, description="Support BLAS functionality") variant("lapack", default=False, description="Support LAPACK functionality") variant("cairo", default=False, description="Support Cairo functionality") variant("freetype", default=False, description="Support FreeType functionality") variant("readline", default=False, description="Support Readline functionality") variant("regex", default=False, description="Support regex functionality") variant("pthread", default=False, description="Support POSIX threads functionality") variant("openmp", default=False, description="Support OpenMP functionality") variant("opencl", default=False, description="Support OpenCL functionality") variant("bzlib", default=False, description="Support BZIP2 functionality") variant("zstd", default=False, description="Support Zstandard functionality") variant("gdal", default=True, description="Enable GDAL/OGR support") variant("liblas", default=False, description="Enable libLAS support") variant("wxwidgets", default=False, description="Enable wxWidgets support") variant("netcdf", default=False, description="Enable NetCDF support") variant("geos", default=False, description="Enable GEOS support") variant("x", default=False, description="Use the X Window System") # https://htmlpreview.github.io/?https://github.com/OSGeo/grass/blob/master/REQUIREMENTS.html # General requirements depends_on("gmake@3.81:", type="build") depends_on("iconv") depends_on("zlib-api") depends_on("flex", type="build") depends_on("bison", type="build") depends_on("proj") # GRASS 7.8.0 was supposed to support PROJ 6, but it still checks for # share/proj/epsg, which was removed in PROJ 6 depends_on("proj@:5", when="@:7.8.0") # PROJ6 support released in GRASS 7.8.1 # https://courses.neteler.org/grass-gis-7-8-1-released-with-proj-6-and-gdal-3-support/ depends_on("proj@6:", when="@7.8.1:") depends_on("python@2.7:", type=("build", "run")) depends_on("py-six", when="@7.8:", type=("build", "run")) # Optional packages depends_on("libtiff", when="+tiff") depends_on("libpng", when="+png") depends_on("postgresql", when="+postgres") depends_on("mariadb", when="+mysql") depends_on("sqlite", when="+sqlite") depends_on("gl", when="+opengl") depends_on("unixodbc", when="+odbc") depends_on("fftw", when="+fftw") depends_on("blas", when="+blas") depends_on("lapack", when="+lapack") depends_on("cairo@1.5.8:", when="+cairo") depends_on("freetype", when="+freetype") depends_on("readline", when="+readline") depends_on("opencl", when="+opencl") depends_on("bzip2", when="+bzlib") depends_on("zstd", when="+zstd") depends_on("gdal", when="+gdal") conflicts("^gdal@3.3:", when="@7.8") depends_on("liblas", when="+liblas") depends_on("wxwidgets", when="+wxwidgets") depends_on("py-wxpython@2.8.10.1:", when="+wxwidgets", type=("build", "run")) depends_on("netcdf-c", when="+netcdf") depends_on("geos", when="+geos") depends_on("libx11", when="+x") def url_for_version(self, version): url = "https://grass.osgeo.org/grass{0}/source/grass-{1}.tar.gz" return url.format(version.up_to(2).joined, version) # https://grasswiki.osgeo.org/wiki/Compile_and_Install def configure_args(self): spec = self.spec args = [ "--without-nls", # TODO: add packages for these optional dependencies "--without-opendwg", "--without-pdal", "--with-proj-share={0}".format(spec["proj"].prefix.share.proj), ] if "+cxx" in spec: args.append("--with-cxx") else: args.append("--without-cxx") if "+tiff" in spec: args.append("--with-tiff") else: args.append("--without-tiff") if "+png" in spec: args.append("--with-png") else: args.append("--without-png") if "+postgres" in spec: args.append("--with-postgres") else: args.append("--without-postgres") if "+mysql" in spec: args.append("--with-mysql") else: args.append("--without-mysql") if "+sqlite" in spec: args.append("--with-sqlite") else: args.append("--without-sqlite") if "+opengl" in spec: args.append("--with-opengl") else: args.append("--without-opengl") if "+odbc" in spec: args.append("--with-odbc") else: args.append("--without-odbc") if "+fftw" in spec: args.append("--with-fftw") else: args.append("--without-fftw") if "+blas" in spec: args.append("--with-blas") else: args.append("--without-blas") if "+lapack" in spec: args.append("--with-lapack") else: args.append("--without-lapack") if "+cairo" in spec: args.append("--with-cairo") else: args.append("--without-cairo") if "+freetype" in spec: args.append("--with-freetype") else: args.append("--without-freetype") if "+readline" in spec: args.append("--with-readline") else: args.append("--without-readline") if "+regex" in spec: args.append("--with-regex") else: args.append("--without-regex") if "+pthread" in spec: args.append("--with-pthread") else: args.append("--without-pthread") if "+openmp" in spec: args.append("--with-openmp") else: args.append("--without-openmp") if "+opencl" in spec: args.append("--with-opencl") else: args.append("--without-opencl") if "+bzlib" in spec: args.append("--with-bzlib") else: args.append("--without-bzlib") if "+zstd" in spec: args.append("--with-zstd") else: args.append("--without-zstd") if "+gdal" in spec: args.append("--with-gdal={0}/gdal-config".format(spec["gdal"].prefix.bin)) else: args.append("--without-gdal") if "+liblas" in spec: args.append("--with-liblas={0}/liblas-config".format(spec["liblas"].prefix.bin)) else: args.append("--without-liblas") if "+wxwidgets" in spec: args.append("--with-wxwidgets={0}/wx-config".format(spec["wxwidgets"].prefix.bin)) else: args.append("--without-wxwidgets") if "+netcdf" in spec: args.append("--with-netcdf={0}/bin/nc-config".format(spec["netcdf-c"].prefix)) else: args.append("--without-netcdf") if "+geos" in spec: args.append("--with-geos={0}/bin/geos-config".format(spec["geos"].prefix)) else: args.append("--without-geos") if "+x" in spec: args.append("--with-x") else: args.append("--without-x") return args # see issue: https://github.com/spack/spack/issues/11325 # 'Platform.make' is created after configure step # hence invoke the following function afterwards @run_after("configure") def fix_iconv_linking(self): if self.spec["iconv"].name != "libiconv": return makefile = FileFilter("include/Make/Platform.make") makefile.filter(r"^ICONVLIB\s*=.*", "ICONVLIB = -liconv")