summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn W. Parent <45471568+johnwparent@users.noreply.github.com>2024-01-19 02:02:06 -0500
committerGitHub <noreply@github.com>2024-01-18 23:02:06 -0800
commitd7bcaa29c06381984745e992d74c3c722e0f81a9 (patch)
tree466eab0fc3f85116e337b8e149561a6f0bae975f
parente9a02735383653c2917624f634f0f427f778952d (diff)
downloadspack-d7bcaa29c06381984745e992d74c3c722e0f81a9.tar.gz
spack-d7bcaa29c06381984745e992d74c3c722e0f81a9.tar.bz2
spack-d7bcaa29c06381984745e992d74c3c722e0f81a9.tar.xz
spack-d7bcaa29c06381984745e992d74c3c722e0f81a9.zip
sqlite package: support Windows build (#41924)
Resubmission of #41761 with proper relocation of get_arch (taken from #41824). Co-authored-by: vsoch <vsochat@stanford.edu>
-rw-r--r--var/spack/repos/builtin/packages/sqlite/package.py123
-rw-r--r--var/spack/repos/builtin/packages/sqlite/quote_compiler_in_makefile.patch13
2 files changed, 96 insertions, 40 deletions
diff --git a/var/spack/repos/builtin/packages/sqlite/package.py b/var/spack/repos/builtin/packages/sqlite/package.py
index f95e12f9ee..c7bedfcd9f 100644
--- a/var/spack/repos/builtin/packages/sqlite/package.py
+++ b/var/spack/repos/builtin/packages/sqlite/package.py
@@ -10,12 +10,13 @@ import spack.platforms
from spack.package import *
-class Sqlite(AutotoolsPackage):
+class Sqlite(AutotoolsPackage, NMakePackage):
"""SQLite is a C-language library that implements a small, fast,
self-contained, high-reliability, full-featured, SQL database engine.
"""
homepage = "https://www.sqlite.org"
+ tags = ["windows"]
license("blessing")
@@ -49,20 +50,40 @@ class Sqlite(AutotoolsPackage):
# All versions prior to 3.26.0 are vulnerable to Magellan when FTS
# is enabled, see https://blade.tencent.com/magellan/index_en.html
- variant(
- "functions",
- default=False,
- when="+dynamic_extensions",
- description="Provide mathematical and string extension functions for SQL "
- "queries using the loadable extensions mechanism",
- )
- variant("fts", default=True, description="Include fts4 and fts5 support")
- variant("column_metadata", default=True, description="Build with COLUMN_METADATA")
- variant("dynamic_extensions", default=True, description="Support loadable extensions")
- variant("rtree", default=True, description="Build with Rtree module")
+ # no hard readline dep on Windows + no variant support, makefile has minimal to no options
+ for plat in ["linux", "darwin", "cray", "freebsd"]:
+ variant(
+ "functions",
+ default=False,
+ description="Provide mathematical and string extension functions for SQL "
+ "queries using the loadable extensions mechanism",
+ when=f"+dynamic_extensions platform={plat}",
+ )
+ variant(
+ "fts",
+ default=True,
+ 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("tcl", when="platform=windows")
# See https://blade.tencent.com/magellan/index_en.html
conflicts("+fts", when="@:3.25")
@@ -89,6 +110,10 @@ class Sqlite(AutotoolsPackage):
# compiler is used.
patch("remove_overflow_builtins.patch", when="@3.17.0:3.20%intel")
+ patch("quote_compiler_in_makefile.patch", when="platform=windows")
+
+ build_system("autotools", "nmake")
+
executables = ["^sqlite3$"]
@classmethod
@@ -186,10 +211,34 @@ class Sqlite(AutotoolsPackage):
def libs(self):
return find_libraries("libsqlite3", root=self.prefix.lib)
- def get_arch(self):
- host_platform = spack.platforms.host()
- 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):
args = []
@@ -211,6 +260,10 @@ class Sqlite(AutotoolsPackage):
return args
+ def get_arch(self):
+ host_platform = spack.platforms.host()
+ return str(host_platform.target("default_target"))
+
@run_after("install")
def build_libsqlitefunctions(self):
if "+functions" in self.spec:
@@ -226,28 +279,18 @@ class Sqlite(AutotoolsPackage):
)
install(libraryname, self.prefix.lib)
- 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 NMakeBuilder(spack.build_systems.nmake.NMakeBuilder):
+ @property
+ def makefile_name(self):
+ return "Makefile.msc"
+
+ def install(self, pkg, spec, prefix):
+ with working_dir(self.build_directory):
+ mkdirp(prefix.include)
+ mkdirp(prefix.lib)
+ mkdirp(prefix.bin)
+ install(f"{self.build_directory}\\*.exe", prefix.bin)
+ install(f"{self.build_directory}\\*.dll", prefix.bin)
+ install(f"{self.build_directory}\\*.lib", prefix.lib)
+ install(f"{self.build_directory}\\*.h", prefix.include)
diff --git a/var/spack/repos/builtin/packages/sqlite/quote_compiler_in_makefile.patch b/var/spack/repos/builtin/packages/sqlite/quote_compiler_in_makefile.patch
new file mode 100644
index 0000000000..3f2ad4656c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sqlite/quote_compiler_in_makefile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.msc b/Makefile.msc
+index 95f0eee0d..8fc173e98 100644
+--- a/Makefile.msc
++++ b/Makefile.msc
+@@ -441,6 +441,8 @@ PROGRAMFILES_X86 = $(PROGRAMFILES_X86:\\=\)
+ #
+ !IFNDEF CC
+ CC = cl.exe
++!ELSE
++CC = "$(CC)"
+ !ENDIF
+
+ # Check for the predefined command macro CSC. This should point to a working