summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorJohn W. Parent <45471568+johnwparent@users.noreply.github.com>2024-02-02 16:27:53 -0500
committerGitHub <noreply@github.com>2024-02-02 13:27:53 -0800
commit8fa8dbc26998bf5bd23b096b522e4d6258e9e75d (patch)
tree8ebb08c3b71681bc92cba2856eb1b9507c198d8f /var
parente59303d4ffaaa81fa4e98379bc7fb24fc466b526 (diff)
downloadspack-8fa8dbc26998bf5bd23b096b522e4d6258e9e75d.tar.gz
spack-8fa8dbc26998bf5bd23b096b522e4d6258e9e75d.tar.bz2
spack-8fa8dbc26998bf5bd23b096b522e4d6258e9e75d.tar.xz
spack-8fa8dbc26998bf5bd23b096b522e4d6258e9e75d.zip
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).
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/sqlite/package.py54
1 files changed, 38 insertions, 16 deletions
diff --git a/var/spack/repos/builtin/packages/sqlite/package.py b/var/spack/repos/builtin/packages/sqlite/package.py
index c7bedfcd9f..09d6f5c1f0 100644
--- a/var/spack/repos/builtin/packages/sqlite/package.py
+++ b/var/spack/repos/builtin/packages/sqlite/package.py
@@ -4,11 +4,14 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import re
+import sys
from tempfile import NamedTemporaryFile
import spack.platforms
from spack.package import *
+is_windows = sys.platform == "win32"
+
class Sqlite(AutotoolsPackage, NMakePackage):
"""SQLite is a C-language library that implements a small, fast,
@@ -53,19 +56,6 @@ class Sqlite(AutotoolsPackage, NMakePackage):
# 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",
@@ -77,11 +67,22 @@ class Sqlite(AutotoolsPackage, NMakePackage):
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}")
+ 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("tcl", when="platform=windows")
@@ -285,6 +286,27 @@ class NMakeBuilder(spack.build_systems.nmake.NMakeBuilder):
def makefile_name(self):
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):
with working_dir(self.build_directory):
mkdirp(prefix.include)