Sqlite package: export api symbols on Windows (#42299)
* Sqlite requires the user to provide a command line arg (DYNAMIC_SHELL) to export shared symbols to import lib from .def * Add other options recommended by Sqlite docs: https://github.com/sqlite/sqlite/blob/master/doc/compile-for-windows.md * Some of these options mean we can restore variants that were disabled for Windows (fts, functions, rtree).
This commit is contained in:
		| @@ -4,11 +4,14 @@ | |||||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||||
| import os | import os | ||||||
| import re | import re | ||||||
|  | import sys | ||||||
| from tempfile import NamedTemporaryFile | from tempfile import NamedTemporaryFile | ||||||
| 
 | 
 | ||||||
| import spack.platforms | import spack.platforms | ||||||
| from spack.package import * | from spack.package import * | ||||||
| 
 | 
 | ||||||
|  | is_windows = sys.platform == "win32" | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class Sqlite(AutotoolsPackage, NMakePackage): | 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, | ||||||
| @@ -52,19 +55,6 @@ class Sqlite(AutotoolsPackage, NMakePackage): | |||||||
| 
 | 
 | ||||||
|     # no hard readline dep on Windows + no variant support, makefile has minimal to no options |     # no hard readline dep on Windows + no variant support, makefile has minimal to no options | ||||||
|     for plat in ["linux", "darwin", "cray", "freebsd"]: |     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( |         variant( | ||||||
|             "column_metadata", |             "column_metadata", | ||||||
|             default=True, |             default=True, | ||||||
| @@ -77,11 +67,22 @@ class Sqlite(AutotoolsPackage, NMakePackage): | |||||||
|             description="Support loadable extensions", |             description="Support loadable extensions", | ||||||
|             when=f"platform={plat}", |             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", when=f"platform={plat}") | ||||||
| 
 | 
 | ||||||
|  |     variant("fts", default=True, description="Include fts4 and fts5 support") | ||||||
|  | 
 | ||||||
|  |     # functions variant is always available on Windows platform, otherwise is tied | ||||||
|  |     # to +dynamic_extensions | ||||||
|  |     function_condition = "platform=windows" if is_windows else "+dynamic_extensions" | ||||||
|  |     variant( | ||||||
|  |         "functions", | ||||||
|  |         default=is_windows, | ||||||
|  |         description="Provide mathematical and string extension functions for SQL " | ||||||
|  |         "queries using the loadable extensions mechanism", | ||||||
|  |         when=f"{function_condition}", | ||||||
|  |     ) | ||||||
|  |     variant("rtree", default=True, description="Build with Rtree module") | ||||||
|     depends_on("zlib-api") |     depends_on("zlib-api") | ||||||
|     depends_on("tcl", when="platform=windows") |     depends_on("tcl", when="platform=windows") | ||||||
| 
 | 
 | ||||||
| @@ -285,6 +286,27 @@ class NMakeBuilder(spack.build_systems.nmake.NMakeBuilder): | |||||||
|     def makefile_name(self): |     def makefile_name(self): | ||||||
|         return "Makefile.msc" |         return "Makefile.msc" | ||||||
| 
 | 
 | ||||||
|  |     def nmake_args(self): | ||||||
|  |         enable_fts = "1" if "+fts" in self.spec else "0" | ||||||
|  |         enable_rtree = "1" if "+rtree" in self.spec else "0" | ||||||
|  |         enable_functions = "1" if "+functions" in self.spec else "0" | ||||||
|  | 
 | ||||||
|  |         opts = ( | ||||||
|  |             "OPTS=" | ||||||
|  |             f"-DSQLITE_ENABLE_FTS3={enable_fts} " | ||||||
|  |             f"-DSQLITE_ENABLE_FTS4={enable_fts} " | ||||||
|  |             f"-DSQLITE_ENABLE_FTS5={enable_fts} " | ||||||
|  |             f"-DSQLITE_ENABLE_RTREE={enable_rtree} " | ||||||
|  |             "-DSQLITE_ENABLE_JSON1=1 " | ||||||
|  |             "-DSQLITE_ENABLE_GEOPOLY=1 " | ||||||
|  |             "-DSQLITE_ENABLE_SESSION=1 " | ||||||
|  |             "-DSQLITE_ENABLE_PREUPDATE_HOOK=1 " | ||||||
|  |             "-DSQLITE_ENABLE_SERIALIZE=1 " | ||||||
|  |             f"-DSQLITE_ENABLE_MATH_FUNCTIONS={enable_functions}" | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         return ["USE_NATIVE_LIBPATHS=1", "DYNAMIC_SHELL=1", opts] | ||||||
|  | 
 | ||||||
|     def install(self, pkg, spec, prefix): |     def install(self, pkg, spec, prefix): | ||||||
|         with working_dir(self.build_directory): |         with working_dir(self.build_directory): | ||||||
|             mkdirp(prefix.include) |             mkdirp(prefix.include) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 John W. Parent
					John W. Parent