sqlite: add NMake build system for Windows (#41761)
This commit is contained in:
parent
05761de8c7
commit
94fc2314f1
1 changed files with 71 additions and 36 deletions
|
@ -10,12 +10,13 @@
|
||||||
from spack.package import *
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
class Sqlite(AutotoolsPackage):
|
class Sqlite(AutotoolsPackage, NMakePackage):
|
||||||
"""SQLite is a C-language library that implements a small, fast,
|
"""SQLite is a C-language library that implements a small, fast,
|
||||||
self-contained, high-reliability, full-featured, SQL database engine.
|
self-contained, high-reliability, full-featured, SQL database engine.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
homepage = "https://www.sqlite.org"
|
homepage = "https://www.sqlite.org"
|
||||||
|
tags = ["windows"]
|
||||||
|
|
||||||
version("3.43.2", sha256="6d422b6f62c4de2ca80d61860e3a3fb693554d2f75bb1aaca743ccc4d6f609f0")
|
version("3.43.2", sha256="6d422b6f62c4de2ca80d61860e3a3fb693554d2f75bb1aaca743ccc4d6f609f0")
|
||||||
version("3.42.0", sha256="7abcfd161c6e2742ca5c6c0895d1f853c940f203304a0b49da4e1eca5d088ca6")
|
version("3.42.0", sha256="7abcfd161c6e2742ca5c6c0895d1f853c940f203304a0b49da4e1eca5d088ca6")
|
||||||
|
@ -47,20 +48,40 @@ class Sqlite(AutotoolsPackage):
|
||||||
# All versions prior to 3.26.0 are vulnerable to Magellan when FTS
|
# All versions prior to 3.26.0 are vulnerable to Magellan when FTS
|
||||||
# is enabled, see https://blade.tencent.com/magellan/index_en.html
|
# is enabled, see https://blade.tencent.com/magellan/index_en.html
|
||||||
|
|
||||||
|
# no hard readline dep on Windows + no variant support, makefile has minimal to no options
|
||||||
|
for plat in ["linux", "darwin", "cray", "freebsd"]:
|
||||||
variant(
|
variant(
|
||||||
"functions",
|
"functions",
|
||||||
default=False,
|
default=False,
|
||||||
when="+dynamic_extensions",
|
|
||||||
description="Provide mathematical and string extension functions for SQL "
|
description="Provide mathematical and string extension functions for SQL "
|
||||||
"queries using the loadable extensions mechanism",
|
"queries using the loadable extensions mechanism",
|
||||||
|
when=f"+dynamic_extensions platform={plat}",
|
||||||
)
|
)
|
||||||
variant("fts", default=True, description="Include fts4 and fts5 support")
|
variant(
|
||||||
variant("column_metadata", default=True, description="Build with COLUMN_METADATA")
|
"fts",
|
||||||
variant("dynamic_extensions", default=True, description="Support loadable extensions")
|
default=True,
|
||||||
variant("rtree", default=True, description="Build with Rtree module")
|
description="Include fts4 and fts5 support",
|
||||||
|
when=f"platform={plat}",
|
||||||
|
)
|
||||||
|
variant(
|
||||||
|
"column_metadata",
|
||||||
|
default=True,
|
||||||
|
description="Build with COLUMN_METADATA",
|
||||||
|
when=f"platform={plat}",
|
||||||
|
)
|
||||||
|
variant(
|
||||||
|
"dynamic_extensions",
|
||||||
|
default=True,
|
||||||
|
description="Support loadable extensions",
|
||||||
|
when=f"platform={plat}",
|
||||||
|
)
|
||||||
|
variant(
|
||||||
|
"rtree", default=True, description="Build with Rtree module", when=f"platform={plat}"
|
||||||
|
)
|
||||||
|
depends_on("readline", when=f"platform={plat}")
|
||||||
|
|
||||||
depends_on("readline")
|
|
||||||
depends_on("zlib-api")
|
depends_on("zlib-api")
|
||||||
|
depends_on("tcl", when="platform=windows")
|
||||||
|
|
||||||
# See https://blade.tencent.com/magellan/index_en.html
|
# See https://blade.tencent.com/magellan/index_en.html
|
||||||
conflicts("+fts", when="@:3.25")
|
conflicts("+fts", when="@:3.25")
|
||||||
|
@ -87,6 +108,8 @@ class Sqlite(AutotoolsPackage):
|
||||||
# compiler is used.
|
# compiler is used.
|
||||||
patch("remove_overflow_builtins.patch", when="@3.17.0:3.20%intel")
|
patch("remove_overflow_builtins.patch", when="@3.17.0:3.20%intel")
|
||||||
|
|
||||||
|
build_system("autotools", "nmake")
|
||||||
|
|
||||||
executables = ["^sqlite3$"]
|
executables = ["^sqlite3$"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -188,6 +211,34 @@ def get_arch(self):
|
||||||
host_platform = spack.platforms.host()
|
host_platform = spack.platforms.host()
|
||||||
return str(host_platform.target("default_target"))
|
return str(host_platform.target("default_target"))
|
||||||
|
|
||||||
|
def test_example(self):
|
||||||
|
"""check example table dump"""
|
||||||
|
|
||||||
|
test_data_dir = self.test_suite.current_test_data_dir
|
||||||
|
db_filename = test_data_dir.join("packages.db")
|
||||||
|
|
||||||
|
# Ensure the database only contains one table
|
||||||
|
sqlite3 = which(self.prefix.bin.sqlite3)
|
||||||
|
out = sqlite3(db_filename, ".tables", output=str.split, error=str.split)
|
||||||
|
assert "packages" in out
|
||||||
|
|
||||||
|
# Ensure the database dump matches expectations, where special
|
||||||
|
# characters are replaced with spaces in the expected and actual
|
||||||
|
# output to avoid pattern errors.
|
||||||
|
expected = get_escaped_text_output(test_data_dir.join("dump.out"))
|
||||||
|
out = sqlite3(db_filename, ".dump", output=str.split, error=str.split)
|
||||||
|
check_outputs(expected, out)
|
||||||
|
|
||||||
|
def test_version(self):
|
||||||
|
"""ensure version is expected"""
|
||||||
|
vers_str = str(self.spec.version)
|
||||||
|
|
||||||
|
sqlite3 = which(self.prefix.bin.sqlite3)
|
||||||
|
out = sqlite3("-version", output=str.split, error=str.split)
|
||||||
|
assert vers_str in out
|
||||||
|
|
||||||
|
|
||||||
|
class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
|
||||||
def configure_args(self):
|
def configure_args(self):
|
||||||
args = []
|
args = []
|
||||||
|
|
||||||
|
@ -224,28 +275,12 @@ def build_libsqlitefunctions(self):
|
||||||
)
|
)
|
||||||
install(libraryname, self.prefix.lib)
|
install(libraryname, self.prefix.lib)
|
||||||
|
|
||||||
def test_example(self):
|
|
||||||
"""check example table dump"""
|
|
||||||
|
|
||||||
test_data_dir = self.test_suite.current_test_data_dir
|
class NMakeBuilder(spack.build_systems.nmake.NMakeBuilder):
|
||||||
db_filename = test_data_dir.join("packages.db")
|
@property
|
||||||
|
def makefile_name(self):
|
||||||
|
return "Makefile.msc"
|
||||||
|
|
||||||
# Ensure the database only contains one table
|
def nmake_args(self):
|
||||||
sqlite3 = which(self.prefix.bin.sqlite3)
|
args = [self.define("TCLDIR", self.spec["tcl"].prefix)]
|
||||||
out = sqlite3(db_filename, ".tables", output=str.split, error=str.split)
|
return args
|
||||||
assert "packages" in out
|
|
||||||
|
|
||||||
# Ensure the database dump matches expectations, where special
|
|
||||||
# characters are replaced with spaces in the expected and actual
|
|
||||||
# output to avoid pattern errors.
|
|
||||||
expected = get_escaped_text_output(test_data_dir.join("dump.out"))
|
|
||||||
out = sqlite3(db_filename, ".dump", output=str.split, error=str.split)
|
|
||||||
check_outputs(expected, out)
|
|
||||||
|
|
||||||
def test_version(self):
|
|
||||||
"""ensure version is expected"""
|
|
||||||
vers_str = str(self.spec.version)
|
|
||||||
|
|
||||||
sqlite3 = which(self.prefix.bin.sqlite3)
|
|
||||||
out = sqlite3("-version", output=str.split, error=str.split)
|
|
||||||
assert vers_str in out
|
|
||||||
|
|
Loading…
Reference in a new issue