spack/var/spack/repos/builtin/packages/mongo-c-driver/package.py
2023-02-01 21:07:25 -08:00

145 lines
5.6 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.package import *
class MongoCDriver(Package):
"""libmongoc is a client library written in C for MongoDB."""
homepage = "https://github.com/mongodb/mongo-c-driver"
url = "https://github.com/mongodb/mongo-c-driver/releases/download/1.7.0/mongo-c-driver-1.7.0.tar.gz"
maintainers("michaelkuhn")
version("1.21.0", sha256="840ff79480070f98870743fbb332e2c10dd021b6b9c952d08010efdda4d70ee4")
version("1.17.6", sha256="8644deec7ae585e8d12566978f2017181e883f303a028b5b3ccb83c91248b150")
version("1.17.5", sha256="4b15b7e73a8b0621493e4368dc2de8a74af381823ae8f391da3d75d227ba16be")
version("1.17.0", sha256="90aa23a3f92be0a076fe0b903b68276a7973d4e472929943069f503d5ab50cb9")
version("1.16.2", sha256="0a722180e5b5c86c415b9256d753b2d5552901dc5d95c9f022072c3cd336887e")
version("1.9.5", sha256="4a4bd0b0375450250a3da50c050b84b9ba8950ce32e16555714e75ebae0b8019")
version("1.9.4", sha256="910c2f1b2e3df4d0ea39c2f242160028f90fcb8201f05339a730ec4ba70811fb")
version("1.9.3", sha256="c2c94ef63aaa09efabcbadc4ac3c8740faa102266bdd2559d550f1955b824398")
version("1.9.1", sha256="91951444d34581deeaff46cc2985c68805754f618a20ac369b761ce9b621c4cd")
version("1.8.1", sha256="87d87b7581018cde7edff85f522d43d9c0a226df26fa53b77ca1613a3aca8233")
version("1.8.0", sha256="1b53883b4cbf08e7d77ad7ab7a02deca90b1719c67f9ad132b47e60d0206ea4e")
version("1.7.0", sha256="48a0dbd44fef2124b51cf501f06be269b1a39452303b880b37473a6030c6e023")
version("1.6.3", sha256="82df03de117a3ccf563b9eccfd2e5365df8f215a36dea7446d439969033ced7b")
version("1.6.2", sha256="7ec27e9be4da2bf9e4b316374f8c29f816f0a0f019b984411777e9681e17f70e")
version("1.6.1", sha256="1bdfb27944c6da8e56da209a5d56efac70df1f8c4ca4498b46f75bf3f9360898")
variant("ssl", default=True, description="Enable SSL support.")
variant("snappy", default=True, description="Enable Snappy support.")
variant("zlib", default=True, description="Enable zlib support.")
variant("zstd", default=True, description="Enable zstd support.")
patch(
"https://github.com/mongodb/mongo-c-driver/pull/466.patch?full_index=1",
sha256="d8802d91226c176ba46d5b82413757121331d556a3a3d57ab65b70e175cab296",
when="@1.8.1",
)
depends_on("cmake@3.1:", type="build", when="@1.10.0:")
depends_on("autoconf", type="build", when="@1.8.1")
depends_on("automake", type="build", when="@1.8.1")
depends_on("libtool", type="build", when="@1.8.1")
depends_on("m4", type="build", when="@1.8.1")
depends_on("pkgconfig", type="build")
# When updating mongo-c-driver, libbson has to be kept in sync.
depends_on("libbson@1.21.0:1.21", when="@1.21")
depends_on("libbson@1.17.0:1.17", when="@1.17")
depends_on("libbson@1.16.0:1.16", when="@1.16")
depends_on("libbson@1.9.0:1.9", when="@1.9")
depends_on("libbson@1.8.0:1.8", when="@1.8")
depends_on("libbson@1.7.0:1.7", when="@1.7")
depends_on("libbson@1.6.0:1.6", when="@1.6")
depends_on("openssl", when="+ssl")
depends_on("snappy", when="+snappy")
depends_on("zlib", when="+zlib")
depends_on("zstd", when="+zstd")
def cmake_args(self):
spec = self.spec
args = ["-DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF", "-DENABLE_BSON=SYSTEM"]
if "+ssl" in spec:
args.append("-DENABLE_SSL=OPENSSL")
else:
args.append("-DENABLE_SSL=OFF")
if "+snappy" in spec:
args.append("-DENABLE_SNAPPY=ON")
else:
args.append("-DENABLE_SNAPPY=OFF")
if "+zlib" in spec:
args.append("-DENABLE_ZLIB=SYSTEM")
else:
args.append("-DENABLE_ZLIB=OFF")
if "+zstd" in spec:
args.append("-DENABLE_ZSTD=ON")
else:
args.append("-DENABLE_ZSTD=OFF")
return args
def install(self, spec, prefix):
with working_dir("spack-build", create=True):
# We cannot simply do
# cmake('..', *std_cmake_args, *self.cmake_args())
# because that is not Python 2 compatible. Instead, collect
# arguments into a temporary buffer first.
args = []
args.extend(std_cmake_args)
args.extend(self.cmake_args())
cmake("..", *args)
make()
make("install")
@property
def force_autoreconf(self):
# Run autoreconf due to build system patch
return self.spec.satisfies("@1.8.1")
def configure_args(self):
spec = self.spec
args = ["--disable-automatic-init-and-cleanup", "--with-libbson=system"]
if "+ssl" in spec:
args.append("--enable-ssl=openssl")
else:
args.append("--enable-ssl=no")
if spec.satisfies("@1.7.0:"):
# --with-{snappy,zlib}=system are broken for versions < 1.8.1
if "+snappy" not in spec:
args.append("--with-snappy=no")
elif spec.satisfies("@1.8.1:"):
args.append("--with-snappy=system")
if "+zlib" not in spec:
args.append("--with-zlib=no")
elif spec.satisfies("@1.8.1:"):
args.append("--with-zlib=system")
return args
@when("@:1.9")
def install(self, spec, prefix):
configure("--prefix={0}".format(prefix), *self.configure_args())
make()
if self.run_tests:
make("check")
make("install")
if self.run_tests:
make("installcheck")