diff options
author | John W. Parent <45471568+johnwparent@users.noreply.github.com> | 2024-01-19 02:02:06 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-18 23:02:06 -0800 |
commit | d7bcaa29c06381984745e992d74c3c722e0f81a9 (patch) | |
tree | 466eab0fc3f85116e337b8e149561a6f0bae975f | |
parent | e9a02735383653c2917624f634f0f427f778952d (diff) | |
download | spack-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.py | 123 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/sqlite/quote_compiler_in_makefile.patch | 13 |
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 |