Skip to content

Commit e8a8283

Browse files
committed
mv gen_providers code out of the build program into its own program
1 parent d2609d9 commit e8a8283

File tree

5 files changed

+126
-55
lines changed

5 files changed

+126
-55
lines changed

Directory.Build.props

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
<Copyright>Copyright 2014-2021 SourceGear, LLC</Copyright>
55
<Company>SourceGear</Company>
66
<Authors>Eric Sink</Authors>
7-
<Version>2.0.8-pre20220201235027</Version>
8-
<AssemblyVersion>2.0.8.1492</AssemblyVersion>
9-
<FileVersion>2.0.8.1492</FileVersion>
7+
<Version>2.0.8-pre20220202090526</Version>
8+
<AssemblyVersion>2.0.8.1493</AssemblyVersion>
9+
<FileVersion>2.0.8.1493</FileVersion>
1010
<Description>SQLitePCLRaw is a Portable Class Library (PCL) for low-level (raw) access to SQLite</Description>
1111
<ProviderLangVersion>10.0</ProviderLangVersion>
1212
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>

build/Program.fs

+1-52
Original file line numberDiff line numberDiff line change
@@ -21,64 +21,13 @@ let main argv =
2121

2222
exec "dotnet" "run .." (Path.Combine(top, "gen_lib_nuspecs"))
2323
exec "dotnet" "run .." (Path.Combine(top, "gen_bundle_nuspecs"))
24+
exec "dotnet" "run" (Path.Combine(top, "gen_providers"))
2425

2526
let dir_nupkgs = Path.Combine(top, "nupkgs")
2627
Directory.CreateDirectory(dir_nupkgs) |> ignore
2728
for s in Directory.GetFiles(dir_nupkgs, "*.nupkg") do
2829
File.Delete(s)
2930

30-
let dir_providers = Path.Combine(top, "src", "providers")
31-
exec "dotnet" "restore" dir_providers
32-
33-
// TODO the arg list for this function has become ridiculous
34-
// TODO the net5min feature should probably be called function pointers, or similar
35-
let gen_provider provider_basename (dllimport_name:string) (subname : string option) conv kind ftr_win32dir ftr_net5min ftr_key =
36-
let dir_name = sprintf "SQLitePCLRaw.provider.%s" provider_basename
37-
let cs_name =
38-
match subname with
39-
| Some subname ->
40-
sprintf "provider_%s_%s.cs" (provider_basename.ToLower()) (subname.ToLower())
41-
| None ->
42-
sprintf "provider_%s.cs" (provider_basename.ToLower())
43-
let cs_dir = Path.Combine(top, "src", dir_name, "Generated")
44-
Directory.CreateDirectory(cs_dir) |> ignore
45-
let cs_path = Path.Combine(cs_dir, cs_name)
46-
let dllimport_name_arg =
47-
if kind = "dynamic" then ""
48-
else $"-p:NAME_FOR_DLLIMPORT=%s{dllimport_name}"
49-
// TODO want to change this to the local tool
50-
let args = $"-o %s{cs_path} -p:NAME=%s{provider_basename} -p:CONV=%s{conv} -p:KIND=%s{kind} -p:FEATURE_NET5MIN=%s{ftr_net5min} -p:FEATURE_WIN32DIR=%s{ftr_win32dir} -p:FEATURE_KEY=%s{ftr_key} %s{dllimport_name_arg} provider.tt"
51-
exec "t4" args dir_providers
52-
53-
gen_provider "dynamic_cdecl" null None "Cdecl" "dynamic" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
54-
gen_provider "dynamic_stdcall" null None "StdCall" "dynamic" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
55-
gen_provider "internal" "__Internal" None "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
56-
gen_provider "winsqlite3" "winsqlite3" None "StdCall" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
57-
58-
// for the various DllImport providers below, we generate
59-
// several sub-variants, which are mapped to TFMs for multi-targeting
60-
// by the corresponding csproj file for that provider.
61-
62-
let subname_most = "most"
63-
let subname_net5min = "net5min"
64-
let subname_win = "win"
65-
66-
gen_provider "e_sqlite3" "e_sqlite3" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
67-
gen_provider "e_sqlite3" "e_sqlite3" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/false"
68-
gen_provider "e_sqlite3" "e_sqlite3" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
69-
70-
gen_provider "e_sqlcipher" "e_sqlcipher" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
71-
gen_provider "e_sqlcipher" "e_sqlcipher" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/true"
72-
gen_provider "e_sqlcipher" "e_sqlcipher" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
73-
74-
gen_provider "sqlcipher" "sqlcipher" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
75-
gen_provider "sqlcipher" "sqlcipher" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/true"
76-
gen_provider "sqlcipher" "sqlcipher" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
77-
78-
gen_provider "sqlite3" "sqlite3" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
79-
gen_provider "sqlite3" "sqlite3" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/false"
80-
gen_provider "sqlite3" "sqlite3" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
81-
8231
let just_build_dirs = [
8332
"SQLitePCLRaw.nativelibrary"
8433
]

gen_providers/Program.fs

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
2+
open System
3+
open System.Diagnostics
4+
open System.IO
5+
open System.Runtime.InteropServices
6+
open System.Xml.Linq
7+
open System.Linq
8+
9+
let exec = build.exec
10+
11+
[<EntryPoint>]
12+
let main argv =
13+
let top =
14+
let cwd = Directory.GetCurrentDirectory()
15+
Path.GetFullPath(Path.Combine(cwd, ".."))
16+
// TODO maybe walk upward until we find the right directory
17+
18+
let dir_providers = Path.Combine(top, "src", "providers")
19+
exec "dotnet" "restore" dir_providers
20+
21+
// TODO the arg list for this function has become ridiculous
22+
// TODO the net5min feature should probably be called function pointers, or similar
23+
let gen_provider provider_basename (dllimport_name:string) (subname : string option) conv kind ftr_win32dir ftr_net5min ftr_key =
24+
let dir_name = sprintf "SQLitePCLRaw.provider.%s" provider_basename
25+
let cs_name =
26+
match subname with
27+
| Some subname ->
28+
sprintf "provider_%s_%s.cs" (provider_basename.ToLower()) (subname.ToLower())
29+
| None ->
30+
sprintf "provider_%s.cs" (provider_basename.ToLower())
31+
let cs_dir = Path.Combine(top, "src", dir_name, "Generated")
32+
Directory.CreateDirectory(cs_dir) |> ignore
33+
let cs_path = Path.Combine(cs_dir, cs_name)
34+
let dllimport_name_arg =
35+
if kind = "dynamic" then ""
36+
else $"-p:NAME_FOR_DLLIMPORT=%s{dllimport_name}"
37+
// TODO want to change this to the local tool
38+
let args = $"-o %s{cs_path} -p:NAME=%s{provider_basename} -p:CONV=%s{conv} -p:KIND=%s{kind} -p:FEATURE_NET5MIN=%s{ftr_net5min} -p:FEATURE_WIN32DIR=%s{ftr_win32dir} -p:FEATURE_KEY=%s{ftr_key} %s{dllimport_name_arg} provider.tt"
39+
exec "t4" args dir_providers
40+
41+
gen_provider "dynamic_cdecl" null None "Cdecl" "dynamic" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
42+
gen_provider "dynamic_stdcall" null None "StdCall" "dynamic" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
43+
gen_provider "internal" "__Internal" None "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
44+
gen_provider "winsqlite3" "winsqlite3" None "StdCall" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
45+
46+
// for the various DllImport providers below, we generate
47+
// several sub-variants, which are mapped to TFMs for multi-targeting
48+
// by the corresponding csproj file for that provider.
49+
50+
let subname_most = "most"
51+
let subname_net5min = "net5min"
52+
let subname_win = "win"
53+
54+
gen_provider "e_sqlite3" "e_sqlite3" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
55+
gen_provider "e_sqlite3" "e_sqlite3" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/false"
56+
gen_provider "e_sqlite3" "e_sqlite3" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
57+
58+
gen_provider "e_sqlcipher" "e_sqlcipher" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
59+
gen_provider "e_sqlcipher" "e_sqlcipher" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/true"
60+
gen_provider "e_sqlcipher" "e_sqlcipher" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
61+
62+
gen_provider "sqlcipher" "sqlcipher" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
63+
gen_provider "sqlcipher" "sqlcipher" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/true"
64+
gen_provider "sqlcipher" "sqlcipher" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/true"
65+
66+
gen_provider "sqlite3" "sqlite3" (Some subname_most) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
67+
gen_provider "sqlite3" "sqlite3" (Some subname_net5min) "Cdecl" "dllimport" "FEATURE_WIN32DIR/false" "FEATURE_NET5MIN/true" "FEATURE_KEY/false"
68+
gen_provider "sqlite3" "sqlite3" (Some subname_win) "Cdecl" "dllimport" "FEATURE_WIN32DIR/true" "FEATURE_NET5MIN/false" "FEATURE_KEY/false"
69+
70+
0 // return an integer exit code
71+

gen_providers/exec.fs

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
2+
module build
3+
open System
4+
open System.Diagnostics
5+
6+
let exec filename args startDir =
7+
let wd = System.IO.Path.GetFullPath(startDir)
8+
let timer = Stopwatch.StartNew()
9+
let procStartInfo =
10+
ProcessStartInfo(
11+
RedirectStandardOutput = true,
12+
RedirectStandardError = true,
13+
UseShellExecute = false,
14+
FileName = filename,
15+
Arguments = args,
16+
WorkingDirectory = wd
17+
)
18+
19+
let ProcessOutput (e : DataReceivedEventArgs) = System.Console.WriteLine(e.Data)
20+
let ProcessError (e : DataReceivedEventArgs) = System.Console.Error.WriteLine(e.Data)
21+
22+
let p = new Process(StartInfo = procStartInfo)
23+
p.OutputDataReceived.Add(ProcessOutput)
24+
p.ErrorDataReceived.Add(ProcessError)
25+
26+
let desc = sprintf "%s %s in %s" filename args wd
27+
printfn "-------- %s" desc
28+
p.Start() |> ignore
29+
//printfn "Started %s with pid %i" p.ProcessName p.Id
30+
p.BeginOutputReadLine()
31+
p.BeginErrorReadLine()
32+
p.WaitForExit()
33+
timer.Stop()
34+
printfn "Finished %s after %A milliseconds" desc timer.ElapsedMilliseconds
35+
let rc = p.ExitCode
36+
if rc <> 0 then raise(Exception())
37+
()
38+

gen_providers/gen_providers.fsproj

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net6.0</TargetFramework>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<Compile Include="exec.fs" />
10+
<Compile Include="Program.fs" />
11+
</ItemGroup>
12+
13+
</Project>

0 commit comments

Comments
 (0)