Skip to content

Commit

Permalink
Add conan recipe
Browse files Browse the repository at this point in the history
- Closes issue utelle#124: Conan package
  • Loading branch information
Myroendan committed Nov 17, 2023
1 parent 2c7a517 commit ee7bf05
Show file tree
Hide file tree
Showing 2 changed files with 246 additions and 0 deletions.
6 changes: 6 additions & 0 deletions conan/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
sources:
"1.7.5":
url: "https://github.com/utelle/SQLite3MultipleCiphers/archive/refs/tags/v1.7.5.tar.gz"
sha256: ""
strip_root: true

240 changes: 240 additions & 0 deletions conan/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
from conan import ConanFile
from conan.tools.cmake import cmake_layout, CMakeDeps, CMakeToolchain, CMake
from conan.tools.files import get, copy
import os

required_conan_version = ">=2.0"


class sqlite3mc(ConanFile):
name = "sqlite3mc"
version = "1.7.5"
package_type = "library"

license = "MIT"
author = "utelle(GitHub)"
homepage = "https://github.com/utelle/SQLite3MultipleCiphers"
url = "https://github.com/conan-io/conan-center-index"
description = "The project SQLite3 Multiple Ciphers implements an encryption extension for SQLite with support for multiple ciphers."
topics = (
"sqlite",
"sqlite3",
"sqlite3-encryption",
"database-encryption",
"sqlite3-extension",
)

settings = "os", "compiler", "build_type", "arch"
options = {
"shared": [True, False],
"require_zlib": [True, False],
"static_runtime_link": [True, False],
"build_shell": [True, False],
"with_icu": [True, False],
"enable_debug": [True, False],
"soundex": [True, False],
"enable_column_metadata": [True, False],
"secure_delete": [True, False],
"enable_fts3": [True, False],
"enable_fts3_paranthesis": [True, False],
"enable_fts4": [True, False],
"enable_fts5": [True, False],
"enable_carray": [True, False],
"enable_csv": [True, False],
"enable_extfunc": [True, False],
"enable_geopoly": [True, False],
"enable_json1": [True, False],
"enable_rtree": [True, False],
"enable_uuid": [True, False],
"use_uri": [True, False],
"user_authentication": [True, False],
"enable_preupdate_hook": [True, False],
"enable_session": [True, False],
"shell_is_utf8": [True, False],
"enable_fileio": [True, False],
"enable_regexp": [True, False],
"enable_series": [True, False],
"enable_sha3": [True, False],
"enable_explain_comments": [True, False],
"enable_dbpage_vtab": [True, False],
"enable_dbstat_vtab": [True, False],
"enable_stmtvtab": [True, False],
"enable_unknown_sql_function": [True, False],
"use_miniz": [True, False],
"enable_compress": [True, False],
"enable_sqlar": [True, False],
"enable_zipfile": [True, False],
"use_sqleet_legacy": [True, False],
"use_sqlcipher_legacy": [True, False],
"secure_memory": [True, False],
"use_random_fill_memory": [True, False],
"omit_aes_hardware_support": [True, False],
}
default_options = {
"shared": False,
"require_zlib": False,
"static_runtime_link": False,
"build_shell": False,
"with_icu": False,
"enable_debug": False,
"soundex": True,
"enable_column_metadata": True,
"secure_delete": True,
"enable_fts3": True,
"enable_fts3_paranthesis": True,
"enable_fts4": True,
"enable_fts5": True,
"enable_carray": True,
"enable_csv": True,
"enable_extfunc": True,
"enable_geopoly": True,
"enable_json1": True,
"enable_rtree": True,
"enable_uuid": True,
"use_uri": True,
"user_authentication": True,
"enable_preupdate_hook": False,
"enable_session": False,
"shell_is_utf8": True,
"enable_fileio": True,
"enable_regexp": True,
"enable_series": True,
"enable_sha3": True,
"enable_explain_comments": True,
"enable_dbpage_vtab": True,
"enable_dbstat_vtab": True,
"enable_stmtvtab": True,
"enable_unknown_sql_function": True,
"use_miniz": False,
"enable_compress": False,
"enable_sqlar": False,
"enable_zipfile": False,
"use_sqleet_legacy": False,
"use_sqlcipher_legacy": False,
"secure_memory": False,
"use_random_fill_memory": False,
"omit_aes_hardware_support": False,
}

def source(self):
get(self, **self.conan_data["sources"][self.version])

def layout(self):
cmake_layout(self)

def requirements(self):
if self.options.require_zlib:
self.requires("zlib/[>=1.2.9]")
if self.options.with_icu:
self.requires("icu/[>=67.1]")

def generate(self):
deps = CMakeDeps(self)
deps.generate()

tc = CMakeToolchain(self)
tc.variables["_SQLITE3MC_REQUIRE_ZLIB"] = self.options.require_zlib
tc.variables["SQLITE3MC_STATIC_RUNTIME_LINK"] = self.options.static_runtime_link
tc.variables["SQLITE3MC_STATIC"] = not self.options.shared
tc.variables["SQLITE3MC_BUILD_SHELL"] = self.options.build_shell
tc.variables["SQLITE3MC_WITH_ICU"] = self.options.with_icu

tc.variables["SQLITE_ENABLE_DEBUG"] = self.options.enable_debug
tc.variables["SQLITE_SOUNDEX"] = self.options.soundex
tc.variables[
"SQLITE_ENABLE_COLUMN_METADATA"
] = self.options.enable_column_metadata
tc.variables["SQLITE_SECURE_DELETE"] = self.options.secure_delete
tc.variables["SQLITE_ENABLE_FTS3"] = self.options.enable_fts3
tc.variables[
"SQLITE_ENABLE_FTS3_PARENTHESIS"
] = self.options.enable_fts3_paranthesis
tc.variables["SQLITE_ENABLE_FTS4"] = self.options.enable_fts4
tc.variables["SQLITE_ENABLE_FTS5"] = self.options.enable_fts5

tc.variables["SQLITE_ENABLE_CARRAY"] = self.options.enable_carray
tc.variables["SQLITE_ENABLE_CSV"] = self.options.enable_csv
tc.variables["SQLITE_ENABLE_EXTFUNC"] = self.options.enable_extfunc
tc.variables["SQLITE_ENABLE_GEOPOLY"] = self.options.enable_geopoly
tc.variables["SQLITE_ENABLE_JSON1"] = self.options.enable_json1
tc.variables["SQLITE_ENABLE_RTREE"] = self.options.enable_rtree
tc.variables["SQLITE_ENABLE_UUID"] = self.options.enable_uuid
tc.variables["SQLITE_USE_URI"] = self.options.use_uri
tc.variables["SQLITE_USER_AUTHENTICATION"] = self.options.user_authentication
tc.variables[
"SQLITE_ENABLE_PREUPDATE_HOOK"
] = self.options.enable_preupdate_hook
tc.variables["SQLITE_ENABLE_SESSION"] = self.options.enable_session
tc.variables["SQLITE_SHELL_IS_UTF8"] = self.options.shell_is_utf8

# Options for library only
tc.variables["SQLITE_ENABLE_FILEIO"] = self.options.enable_fileio
tc.variables["SQLITE_ENABLE_REGEXP"] = self.options.enable_regexp
tc.variables["SQLITE_ENABLE_SERIES"] = self.options.enable_series
tc.variables["SQLITE_ENABLE_SHA3"] = self.options.enable_sha3

# Options for shell only (compatibility with official SQLite shell)
tc.variables[
"SQLITE_ENABLE_EXPLAIN_COMMENTS"
] = self.options.enable_explain_comments
tc.variables["SQLITE_ENABLE_DBPAGE_VTAB"] = self.options.enable_dbpage_vtab
tc.variables["SQLITE_ENABLE_DBSTAT_VTAB"] = self.options.enable_dbstat_vtab
tc.variables["SQLITE_ENABLE_STMTVTAB"] = self.options.enable_stmtvtab
tc.variables[
"SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION"
] = self.options.enable_unknown_sql_function

# Embedded Compression
tc.variables["SQLITE3MC_USE_MINIZ"] = self.options.use_miniz

# Compression/Options that require ZLIB
tc.variables["SQLITE_ENABLE_COMPRESS"] = self.options.enable_compress
tc.variables["SQLITE_ENABLE_SQLAR"] = self.options.enable_sqlar
tc.variables["SQLITE_ENABLE_ZIPFILE"] = self.options.enable_zipfile

# Legacy Encryption Extensions
tc.variables["SQLITE3MC_USE_SQLEET_LEGACY"] = self.options.use_sqleet_legacy
tc.variables[
"SQLITE3MC_USE_SQLCIPHER_LEGACY"
] = self.options.use_sqlcipher_legacy

# Additional memory security (filling freed memory allocations with zeros or random data)
tc.variables["SQLITE3MC_SECURE_MEMORY"] = self.options.secure_memory
tc.variables[
"SQLITE3MC_USE_RANDOM_FILL_MEMORY"
] = self.options.use_random_fill_memory

# Omit AES hardware support
tc.variables[
"SQLITE3MC_OMIT_AES_HARDWARE_SUPPORT"
] = self.options.omit_aes_hardware_support

tc.generate()

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
cmake = CMake(self)
cmake.install()
copy(
self,
"LICENSE*",
src=self.source_folder,
dst=os.path.join(self.package_folder, "licenses"),
keep_path=False,
)

def package_info(self):
if self.options.shared:
self.cpp_info.libs = ["sqlite3mc"]
else:
self.cpp_info.libs = ["sqlite3mc_static"]
if self.settings.os in ("Linux", "Macos"):
self.cpp_info.system_libs.append("pthread")
self.cpp_info.system_libs.append("dl")
self.cpp_info.system_libs.append("m")
if self.settings.os == "Macos":
self.cpp_info.frameworks.append("Security")

0 comments on commit ee7bf05

Please sign in to comment.