diff --git a/build/Program.fs b/build/Program.fs
index fd65414a..bfba2a4b 100644
--- a/build/Program.fs
+++ b/build/Program.fs
@@ -30,6 +30,7 @@ let main argv =
let nuspec_dirs = [
"lib.e_sqlite3"
"lib.e_sqlcipher"
+ "lib.e_sqlite3mc"
]
for s in nuspec_dirs do
@@ -48,18 +49,24 @@ let main argv =
"provider.winsqlite3"
"provider.e_sqlite3"
"provider.e_sqlcipher"
+ "provider.e_sqlite3mc"
"provider.sqlite3"
"provider.sqlcipher"
+ "provider.sqlite3mc"
"lib.e_sqlite3.android"
"lib.e_sqlite3.ios"
"lib.e_sqlite3.tvos"
"lib.e_sqlcipher.android"
"lib.e_sqlcipher.ios"
+ "lib.e_sqlite3mc.android"
+ "lib.e_sqlite3mc.ios"
"lib.e_sqlite3"
"lib.e_sqlcipher"
+ "lib.e_sqlite3mc"
"bundle_green"
"bundle_e_sqlite3"
"bundle_e_sqlcipher"
+ "bundle_e_sqlite3mc"
"bundle_zetetic"
"bundle_winsqlite3"
"bundle_sqlite3"
@@ -86,6 +93,7 @@ let main argv =
let real_xunit_dirs = [
yield "e_sqlite3"
yield "e_sqlcipher"
+ yield "e_sqlite3mc"
// TODO do bundle_sqlite3 real_xunit here?
if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then yield "winsqlite3"
]
@@ -99,6 +107,7 @@ let main argv =
let fake_xunit_dirs = [
yield "e_sqlite3"
yield "e_sqlcipher"
+ yield "e_sqlite3mc"
if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then yield "winsqlite3"
yield "sqlite3"
]
@@ -116,6 +125,7 @@ let main argv =
let args = "run -f net6.0-windows -r win-x86 --no-self-contained"
exec "dotnet" args (Path.Combine(top, "test_nupkgs", "e_sqlite3", "fake_xunit"))
exec "dotnet" args (Path.Combine(top, "test_nupkgs", "e_sqlcipher", "fake_xunit"))
+ exec "dotnet" args (Path.Combine(top, "test_nupkgs", "e_sqlite3mc", "fake_xunit"))
#endif
printfn "generating push.bat"
diff --git a/gen_lib_nuspecs/Program.cs b/gen_lib_nuspecs/Program.cs
index 2602984f..773e9b2e 100644
--- a/gen_lib_nuspecs/Program.cs
+++ b/gen_lib_nuspecs/Program.cs
@@ -164,6 +164,7 @@ static string AsString_basename_in_cb(this WhichLib e)
{
case WhichLib.E_SQLITE3: return "e_sqlite3";
case WhichLib.E_SQLCIPHER: return "e_sqlcipher"; // TODO no e_ prefix in cb yet
+ case WhichLib.E_SQLITE3MC: return "e_sqlite3mc";
default:
throw new NotImplementedException(string.Format("WhichLib.AsString for {0}", e));
}
@@ -175,6 +176,7 @@ static string AsString_basename_in_nupkg(this WhichLib e)
{
case WhichLib.E_SQLITE3: return "e_sqlite3";
case WhichLib.E_SQLCIPHER: return "e_sqlcipher";
+ case WhichLib.E_SQLITE3MC: return "e_sqlite3mc";
default:
throw new NotImplementedException(string.Format("WhichLib.AsString for {0}", e));
}
@@ -600,11 +602,69 @@ private static void gen_nuspec_lib_e_sqlcipher(string dir_src)
}
}
+ private static void gen_nuspec_lib_e_sqlite3mc(string dir_src)
+ {
+ string id = string.Format("{0}.lib.e_sqlite3mc", common.ROOT_NAME);
+
+ var settings = common.XmlWriterSettings_default();
+ settings.OmitXmlDeclaration = false;
+
+ var dir_proj = Path.Combine(dir_src, id);
+ Directory.CreateDirectory(dir_proj);
+ common.gen_dummy_csproj(dir_proj, id);
+
+ using (XmlWriter f = XmlWriter.Create(Path.Combine(dir_proj, string.Format("{0}.nuspec", id)), settings))
+ {
+ f.WriteStartDocument();
+ f.WriteComment("Automatically generated");
+
+ f.WriteStartElement("package", "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd");
+
+ f.WriteStartElement("metadata");
+ common.write_nuspec_common_metadata(id, f);
+ f.WriteElementString("description", "This package contains platform-specific native code builds of SQLite3 Multiple Ciphers (see utelle/SQLite3MultipleCiphers on GitHub) for use with SQLitePCLRaw. To use this package, you need SQLitePCLRaw.core as well as one of the SQLitePCLRaw.provider.* packages. Convenience packages are named SQLitePCLRaw.bundle_*.");
+
+ f.WriteEndElement(); // metadata
+
+ f.WriteStartElement("files");
+
+ write_nuspec_file_entries_from_cb(WhichLib.E_SQLITE3MC, "v142", f);
+
+ {
+ var tname = string.Format("{0}.targets", id);
+ Directory.CreateDirectory(Path.Combine(dir_proj, "net461"));
+ var path_targets = Path.Combine(dir_proj, "net461", tname);
+ var relpath_targets = nuget_path_combine(".", "net461", tname);
+ gen_nuget_targets(path_targets, WhichLib.E_SQLITE3MC);
+ common.write_nuspec_file_entry(
+ relpath_targets,
+ string.Format("buildTransitive\\{0}", TFM.NET461.AsString()),
+ f
+ );
+ }
+
+ write_nuspec_wasm_targets_file_entry(dir_src, id, WhichLib.E_SQLITE3MC, TFM.NET60, f);
+ write_nuspec_wasm_targets_file_entry(dir_src, id, WhichLib.E_SQLITE3MC, TFM.NET70, f);
+ write_nuspec_wasm_targets_file_entry(dir_src, id, WhichLib.E_SQLITE3MC, TFM.NET80, f);
+
+ // TODO need a comment here to explain these
+ common.write_empty(f, TFM.NET461);
+ common.write_empty(f, TFM.NETSTANDARD20);
+
+ f.WriteEndElement(); // files
+
+ f.WriteEndElement(); // package
+
+ f.WriteEndDocument();
+ }
+ }
+
enum WhichLib
{
NONE,
E_SQLITE3,
E_SQLCIPHER,
+ E_SQLITE3MC,
}
static LibSuffix get_lib_suffix_from_rid(string rid)
@@ -879,6 +939,7 @@ public static void Main(string[] args)
gen_nuspec_lib_e_sqlite3(dir_src);
gen_nuspec_lib_e_sqlcipher(dir_src);
+ gen_nuspec_lib_e_sqlite3mc(dir_src);
}
}
diff --git a/gen_providers/Program.fs b/gen_providers/Program.fs
index 25701853..4f480564 100644
--- a/gen_providers/Program.fs
+++ b/gen_providers/Program.fs
@@ -67,5 +67,11 @@ let main argv =
gen_provider s s (Some subname_funcptrs_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_FUNCPTRS/callingconv" "FEATURE_KEY/true" "FEATURE_LOADEXTENSION/true"
gen_provider s s (Some subname_funcptrs_notwin) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_FUNCPTRS/plain" "FEATURE_KEY/true" "FEATURE_LOADEXTENSION/true"
+ for s in ["e_sqlite3mc"; "sqlite3mc"; ] do
+ gen_provider s s (Some subname_prenet5_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_FUNCPTRS/false" "FEATURE_KEY/true" "FEATURE_LOADEXTENSION/false"
+ gen_provider s s (Some subname_prenet5_notwin) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_FUNCPTRS/false" "FEATURE_KEY/true" "FEATURE_LOADEXTENSION/false"
+ gen_provider s s (Some subname_funcptrs_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_FUNCPTRS/callingconv" "FEATURE_KEY/true" "FEATURE_LOADEXTENSION/true"
+ gen_provider s s (Some subname_funcptrs_notwin) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_FUNCPTRS/plain" "FEATURE_KEY/true" "FEATURE_LOADEXTENSION/true"
+
0 // return an integer exit code
diff --git a/sn/SQLitePCLRaw.lib.e_sqlite3mc.snk b/sn/SQLitePCLRaw.lib.e_sqlite3mc.snk
new file mode 100644
index 00000000..bf968084
Binary files /dev/null and b/sn/SQLitePCLRaw.lib.e_sqlite3mc.snk differ
diff --git a/sn/SQLitePCLRaw.provider.e_sqlite3mc.snk b/sn/SQLitePCLRaw.provider.e_sqlite3mc.snk
new file mode 100644
index 00000000..04d59b35
Binary files /dev/null and b/sn/SQLitePCLRaw.provider.e_sqlite3mc.snk differ
diff --git a/sn/SQLitePCLRaw.provider.sqlite3mc.snk b/sn/SQLitePCLRaw.provider.sqlite3mc.snk
new file mode 100644
index 00000000..795dd306
Binary files /dev/null and b/sn/SQLitePCLRaw.provider.sqlite3mc.snk differ
diff --git a/src/SQLitePCLRaw.bundle_e_sqlite3mc/SQLitePCLRaw.bundle_e_sqlite3mc.csproj b/src/SQLitePCLRaw.bundle_e_sqlite3mc/SQLitePCLRaw.bundle_e_sqlite3mc.csproj
new file mode 100644
index 00000000..3b20ce58
--- /dev/null
+++ b/src/SQLitePCLRaw.bundle_e_sqlite3mc/SQLitePCLRaw.bundle_e_sqlite3mc.csproj
@@ -0,0 +1,26 @@
+
+
+
+ netstandard2.0;$(tfm_net6_ios);$(tfm_net6_maccatalyst);$(tfm_net6_android);$(tfm_classic_ios);$(tfm_classic_android);net461
+ true
+ SQLitePCLRaw.bundle_e_sqlite3mc
+ SQLitePCLRaw.batteries_v2
+ ..\..\sn\SQLitePCLRaw.batteries_v2.snk
+ false
+ This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. Call SQLitePCL.Batteries.Init(). Policy of this bundle: e_sqlite3mc included
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SQLitePCLRaw.lib.e_sqlite3mc.android/SQLitePCLRaw.lib.e_sqlite3mc.android.csproj b/src/SQLitePCLRaw.lib.e_sqlite3mc.android/SQLitePCLRaw.lib.e_sqlite3mc.android.csproj
new file mode 100644
index 00000000..3176eaef
--- /dev/null
+++ b/src/SQLitePCLRaw.lib.e_sqlite3mc.android/SQLitePCLRaw.lib.e_sqlite3mc.android.csproj
@@ -0,0 +1,38 @@
+
+
+ $(tfm_net6_android);$(tfm_classic_android)
+ false
+ true
+ ..\..\sn\SQLitePCLRaw.lib.e_sqlite3mc.snk
+ This package contains platform-specific native code builds of SQLite3 Multiple Ciphers (see utelle/SQLite3MultipleCiphers on GitHub) for use with SQLitePCLRaw. To use this package, you need SQLitePCLRaw.core as well as one of the SQLitePCLRaw.provider.* packages. Convenience packages are named SQLitePCLRaw.bundle_*.
+
+
+
+
+
+
+
+ false
+
+
+
+
+ Always
+ x86\libe_sqlite3mc.so
+
+
+ Always
+ x86_64\libe_sqlite3mc.so
+
+
+ Always
+ arm64-v8a\libe_sqlite3mc.so
+
+
+ Always
+ armeabi-v7a\libe_sqlite3mc.so
+
+
+
+
+
diff --git a/src/SQLitePCLRaw.lib.e_sqlite3mc.ios/SQLitePCLRaw.lib.e_sqlite3mc.ios.csproj b/src/SQLitePCLRaw.lib.e_sqlite3mc.ios/SQLitePCLRaw.lib.e_sqlite3mc.ios.csproj
new file mode 100644
index 00000000..8e5c0e21
--- /dev/null
+++ b/src/SQLitePCLRaw.lib.e_sqlite3mc.ios/SQLitePCLRaw.lib.e_sqlite3mc.ios.csproj
@@ -0,0 +1,17 @@
+
+
+ $(tfm_net6_ios);$(tfm_classic_ios)
+ false
+ true
+ ..\..\sn\SQLitePCLRaw.lib.e_sqlite3mc.snk
+ This package contains platform-specific native code builds of SQLite3 Multiple Ciphers (see utelle/SQLite3MultipleCiphers on GitHub) for use with SQLitePCLRaw. To use this package, you need SQLitePCLRaw.core as well as one of the SQLitePCLRaw.provider.* packages. Convenience packages are named SQLitePCLRaw.bundle_*.
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SQLitePCLRaw.lib.e_sqlite3mc.ios/SQLitePCLRaw.lib.e_sqlite3mc.ios.targets b/src/SQLitePCLRaw.lib.e_sqlite3mc.ios/SQLitePCLRaw.lib.e_sqlite3mc.ios.targets
new file mode 100644
index 00000000..e64fbbf3
--- /dev/null
+++ b/src/SQLitePCLRaw.lib.e_sqlite3mc.ios/SQLitePCLRaw.lib.e_sqlite3mc.ios.targets
@@ -0,0 +1,16 @@
+
+
+
+ Static
+ False
+ true
+
+
+
+
+ Static
+ False
+ true
+
+
+
diff --git a/src/SQLitePCLRaw.provider.e_sqlite3mc/SQLitePCLRaw.provider.e_sqlite3mc.csproj b/src/SQLitePCLRaw.provider.e_sqlite3mc/SQLitePCLRaw.provider.e_sqlite3mc.csproj
new file mode 100644
index 00000000..309c7365
--- /dev/null
+++ b/src/SQLitePCLRaw.provider.e_sqlite3mc/SQLitePCLRaw.provider.e_sqlite3mc.csproj
@@ -0,0 +1,29 @@
+
+
+
+ netstandard2.0;net6.0;net6.0-windows
+ $(ProviderLangVersion)
+ True
+ false
+ true
+ ..\..\sn\SQLitePCLRaw.provider.e_sqlite3mc.snk
+ SQLitePCLRaw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. Packages named 'SQLitePCLRaw.provider.*' (like this one) are 'plugins' that allow SQLitePCLRaw.core to access the native SQLite library. This provider does DllImport of 'e_sqlite3mc', the SQLite3 Multiple Ciphers builds provided with SQLitePCLRaw.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SQLitePCLRaw.provider.sqlite3mc/SQLitePCLRaw.provider.sqlite3mc.csproj b/src/SQLitePCLRaw.provider.sqlite3mc/SQLitePCLRaw.provider.sqlite3mc.csproj
new file mode 100644
index 00000000..533b863e
--- /dev/null
+++ b/src/SQLitePCLRaw.provider.sqlite3mc/SQLitePCLRaw.provider.sqlite3mc.csproj
@@ -0,0 +1,29 @@
+
+
+
+ netstandard2.0;net6.0;net6.0-windows
+ $(ProviderLangVersion)
+ True
+ false
+ true
+ ..\..\sn\SQLitePCLRaw.provider.sqlite3mc.snk
+ SQLitePCLRaw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. Packages named 'SQLitePCLRaw.provider.*' (like this one) are 'plugins' that allow SQLitePCLRaw.core to access the native SQLite library. This provider does DllImport of 'sqlite3mc', to reference the 'system' SQLite3 Multiple Ciphers. One common use for this provider is to access the SQLite3 Multiple Ciphers library installed from source.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/common/batteries_v2.cs b/src/common/batteries_v2.cs
index 9c010a17..4502c3ce 100644
--- a/src/common/batteries_v2.cs
+++ b/src/common/batteries_v2.cs
@@ -91,6 +91,8 @@ public static void Init()
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
#elif PROVIDER_e_sqlcipher
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlcipher());
+#elif PROVIDER_e_sqlite3mc
+ SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3mc());
#elif PROVIDER_sqlcipher
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlcipher());
#elif PROVIDER_winsqlite3
@@ -105,6 +107,8 @@ public static void Init()
DoDynamic_cdecl("e_sqlite3", NativeLibrary.WHERE_RUNTIME_RID | NativeLibrary.WHERE_ADJACENT | NativeLibrary.WHERE_CODEBASE);
#elif PROVIDER_NAME_e_sqlcipher
DoDynamic_cdecl("e_sqlcipher", NativeLibrary.WHERE_RUNTIME_RID | NativeLibrary.WHERE_ADJACENT);
+#elif PROVIDER_NAME_e_sqlite3mc
+ DoDynamic_cdecl("e_sqlite3mc", NativeLibrary.WHERE_RUNTIME_RID | NativeLibrary.WHERE_ADJACENT);
#elif PROVIDER_NAME_sqlcipher
DoDynamic_cdecl("sqlcipher", NativeLibrary.WHERE_ARCH); // TODO coordinate with zetetic
#elif PROVIDER_NAME_winsqlite3
diff --git a/src/common/tests_xunit.cs b/src/common/tests_xunit.cs
index 81a5e903..0c8eeb67 100644
--- a/src/common/tests_xunit.cs
+++ b/src/common/tests_xunit.cs
@@ -811,6 +811,7 @@ public void test_sqlite3_memory()
#endif
}
+#if TODO
[Fact]
public void test_sqlite3_soft_heap_limit64()
{
@@ -849,6 +850,7 @@ public void test_sqlite3_hard_heap_limit64()
query = raw.sqlite3_hard_heap_limit64(-1);
Assert.Equal(limit, query);
}
+#endif
[Fact]
public void test_sqlite3_status()
diff --git a/src/global.json b/src/global.json
index 25c041d4..42ceee69 100644
--- a/src/global.json
+++ b/src/global.json
@@ -1,4 +1,9 @@
{
+ "sdk":
+ {
+ "version": "6.0.100",
+ "rollForward": "latestFeature"
+ },
"msbuild-sdks":
{
"MSBuild.Sdk.Extras": "3.0.44",
diff --git a/src/msbuild_bundle_fragments/e_sqlite3mc_android.xml b/src/msbuild_bundle_fragments/e_sqlite3mc_android.xml
new file mode 100644
index 00000000..b59f4b70
--- /dev/null
+++ b/src/msbuild_bundle_fragments/e_sqlite3mc_android.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ $(DefineConstants);PROVIDER_e_sqlite3mc
+
+
+
+
+
+
+
+
diff --git a/src/msbuild_bundle_fragments/e_sqlite3mc_dllimport.xml b/src/msbuild_bundle_fragments/e_sqlite3mc_dllimport.xml
new file mode 100644
index 00000000..404e5445
--- /dev/null
+++ b/src/msbuild_bundle_fragments/e_sqlite3mc_dllimport.xml
@@ -0,0 +1,13 @@
+
+
+
+ $(DefineConstants);PROVIDER_e_sqlite3mc
+
+
+
+
+
+
+
+
+
diff --git a/src/msbuild_bundle_fragments/e_sqlite3mc_dynamic.xml b/src/msbuild_bundle_fragments/e_sqlite3mc_dynamic.xml
new file mode 100644
index 00000000..27b4b32d
--- /dev/null
+++ b/src/msbuild_bundle_fragments/e_sqlite3mc_dynamic.xml
@@ -0,0 +1,18 @@
+
+
+
+ $(DefineConstants);PROVIDER_dynamic;PROVIDER_dynamic_cdecl;PROVIDER_NAME_e_sqlite3mc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/msbuild_bundle_fragments/e_sqlite3mc_ios.xml b/src/msbuild_bundle_fragments/e_sqlite3mc_ios.xml
new file mode 100644
index 00000000..0c8fbf7c
--- /dev/null
+++ b/src/msbuild_bundle_fragments/e_sqlite3mc_ios.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ $(DefineConstants);PROVIDER_internal
+
+
+
+
+
+
+
+
diff --git a/test_nupkgs/e_sqlite3mc/fake_xunit/Program.cs b/test_nupkgs/e_sqlite3mc/fake_xunit/Program.cs
new file mode 100644
index 00000000..3d006acc
--- /dev/null
+++ b/test_nupkgs/e_sqlite3mc/fake_xunit/Program.cs
@@ -0,0 +1,12 @@
+
+using System;
+
+public static class foo
+{
+ public static int Main()
+ {
+ SQLitePCL.Batteries_V2.Init();
+ return Xunit.Run.AllTestsInCurrentAssembly();
+ }
+}
+
diff --git a/test_nupkgs/e_sqlite3mc/fake_xunit/e_sqlite3mc_with_fake_xunit.csproj b/test_nupkgs/e_sqlite3mc/fake_xunit/e_sqlite3mc_with_fake_xunit.csproj
new file mode 100644
index 00000000..9e9b57de
--- /dev/null
+++ b/test_nupkgs/e_sqlite3mc/fake_xunit/e_sqlite3mc_with_fake_xunit.csproj
@@ -0,0 +1,19 @@
+
+
+ net461;netcoreapp3.1;net6.0;net6.0-windows
+ Exe
+
+
+ win-x86;win-x64
+ win-x64
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test_nupkgs/e_sqlite3mc/real_xunit/e_sqlite3mc_with_real_xunit.csproj b/test_nupkgs/e_sqlite3mc/real_xunit/e_sqlite3mc_with_real_xunit.csproj
new file mode 100644
index 00000000..42f7723b
--- /dev/null
+++ b/test_nupkgs/e_sqlite3mc/real_xunit/e_sqlite3mc_with_real_xunit.csproj
@@ -0,0 +1,24 @@
+
+
+ net461;netcoreapp3.1
+
+
+ win-x86;win-x64
+ win-x64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test_nupkgs/e_sqlite3mc/real_xunit/xunit.runner.json b/test_nupkgs/e_sqlite3mc/real_xunit/xunit.runner.json
new file mode 100644
index 00000000..c394df5a
--- /dev/null
+++ b/test_nupkgs/e_sqlite3mc/real_xunit/xunit.runner.json
@@ -0,0 +1,4 @@
+{
+ "shadowCopy": false
+}
+