|
1 | 1 | require "mkmf"
|
2 | 2 | require "yaml"
|
3 | 3 |
|
| 4 | +# rubocop:disable Style/GlobalVars |
4 | 5 | module Sqlite3
|
5 | 6 | module ExtConf
|
6 | 7 | ENV_ALLOWLIST = ["CC", "CFLAGS", "LDFLAGS", "LIBS", "CPPFLAGS", "LT_SYS_LIBRARY_PATH", "CPP"]
|
@@ -48,58 +49,59 @@ def configure_system_libraries
|
48 | 49 | end
|
49 | 50 |
|
50 | 51 | def configure_packaged_libraries
|
51 |
| - minimal_recipe.tap do |recipe| |
52 |
| - recipe.configure_options += [ |
53 |
| - "--disable-shared", |
54 |
| - "--enable-static", |
55 |
| - "--enable-fts5" |
56 |
| - ] |
57 |
| - ENV.to_h.tap do |env| |
58 |
| - user_cflags = with_config("sqlite-cflags") |
59 |
| - more_cflags = [ |
60 |
| - "-fPIC", # needed for linking the static library into a shared library |
61 |
| - "-O2", # see https://github.com/sparklemotion/sqlite3-ruby/issues/335 for some benchmarks |
62 |
| - "-fvisibility=hidden", # see https://github.com/rake-compiler/rake-compiler-dock/issues/87 |
63 |
| - "-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1", |
64 |
| - "-DSQLITE_USE_URI=1", |
65 |
| - "-DSQLITE_ENABLE_DBPAGE_VTAB=1", |
66 |
| - "-DSQLITE_ENABLE_DBSTAT_VTAB=1" |
67 |
| - ] |
68 |
| - env["CFLAGS"] = [user_cflags, env["CFLAGS"], more_cflags].flatten.join(" ") |
69 |
| - recipe.configure_options += env.select { |k, v| ENV_ALLOWLIST.include?(k) } |
70 |
| - .map { |key, value| "#{key}=#{value.strip}" } |
71 |
| - end |
72 |
| - |
73 |
| - unless File.exist?(File.join(recipe.target, recipe.host, recipe.name, recipe.version)) |
74 |
| - recipe.cook |
75 |
| - end |
76 |
| - recipe.activate |
77 |
| - |
78 |
| - # on macos, pkg-config will not return --cflags without this |
79 |
| - ENV["PKG_CONFIG_ALLOW_SYSTEM_CFLAGS"] = "t" |
80 |
| - |
81 |
| - # only needed for Ruby 3.1.3, see https://bugs.ruby-lang.org/issues/19233 |
82 |
| - RbConfig::CONFIG["PKG_CONFIG"] = config_string("PKG_CONFIG") || "pkg-config" |
83 |
| - |
84 |
| - lib_path = File.join(recipe.path, "lib") |
85 |
| - pcfile = File.join(lib_path, "pkgconfig", "sqlite3.pc") |
86 |
| - abort_pkg_config("pkg_config") unless pkg_config(pcfile) |
87 |
| - |
88 |
| - # see https://bugs.ruby-lang.org/issues/18490 |
89 |
| - ldflags = xpopen(["pkg-config", "--libs", "--static", pcfile], err: [:child, :out], &:read) |
90 |
| - abort_pkg_config("xpopen") unless $?.success? |
91 |
| - ldflags = ldflags.split |
92 |
| - |
93 |
| - # see https://github.com/flavorjones/mini_portile/issues/118 |
94 |
| - "-L#{lib_path}".tap do |lib_path_flag| |
95 |
| - ldflags.prepend(lib_path_flag) unless ldflags.include?(lib_path_flag) |
96 |
| - end |
97 |
| - |
98 |
| - ldflags.each { |ldflag| append_ldflags(ldflag) } |
99 |
| - |
100 |
| - append_cppflags("-DUSING_PACKAGED_LIBRARIES") |
101 |
| - append_cppflags("-DUSING_PRECOMPILED_LIBRARIES") if cross_build? |
| 52 | + ext_dir = File.dirname(__FILE__) |
| 53 | + Dir.chdir(ext_dir) do |
| 54 | + $srcs = Dir["*.c", "sqlite-amalgamation-3500200/sqlite3.c"] |
| 55 | + $hdrs = Dir["*.h", "sqlite-amalgamation-3500200/sqlite3.h"] |
102 | 56 | end
|
| 57 | + $INCFLAGS << " -I$(srcdir)/sqlite-amalgamation-3500200" |
| 58 | + $VPATH << "$(srcdir)/sqlite-amalgamation-3500200" |
| 59 | + |
| 60 | + sqlite_cppflags = [ |
| 61 | + # things set by upstream debian, just as a baseline. taken from |
| 62 | + # https://deb.debian.org/debian/pool/main/s/sqlite3/sqlite3_3.46.1-1.debian.tar.xz |
| 63 | + "-DSQLITE_SECURE_DELETE", |
| 64 | + "-DSQLITE_ENABLE_COLUMN_METADATA", |
| 65 | + "-DSQLITE_ENABLE_FTS3", |
| 66 | + "-DSQLITE_ENABLE_FTS3_PARENTHESIS", |
| 67 | + "-DSQLITE_ENABLE_RTREE=1", |
| 68 | + "-DSQLITE_SOUNDEX=1", |
| 69 | + "-DSQLITE_ENABLE_UNLOCK_NOTIFY", |
| 70 | + "-DSQLITE_ENABLE_DBSTAT_VTAB", |
| 71 | + "-DSQLITE_ALLOW_ROWID_IN_VIEW", |
| 72 | + "-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1", |
| 73 | + "-DSQLITE_ENABLE_LOAD_EXTENSION", |
| 74 | + "-DSQLITE_ENABLE_JSON1", |
| 75 | + "-DSQLITE_LIKE_DOESNT_MATCH_BLOBS", |
| 76 | + "-DSQLITE_THREADSAFE=1", |
| 77 | + "-DSQLITE_ENABLE_FTS3_TOKENIZER=1", |
| 78 | + "-DSQLITE_USE_URI=1", |
| 79 | + "-DSQLITE_MAX_SCHEMA_RETRY=25", |
| 80 | + "-DSQLITE_ENABLE_PREUPDATE_HOOK", |
| 81 | + "-DSQLITE_ENABLE_SESSION", |
| 82 | + "-DSQLITE_ENABLE_STMTVTAB", |
| 83 | + "-DSQLITE_STRICT_SUBTYPE=1", |
| 84 | + "-DSQLITE_MAX_VARIABLE_NUMBER=250000", |
| 85 | + |
| 86 | + # were previously being added by the autoconf amalgamation's configure script |
| 87 | + "-D_REENTRANT=1", |
| 88 | + "-DSQLITE_THREADSAFE=1", |
| 89 | + "-DSQLITE_ENABLE_MATH_FUNCTIONS", |
| 90 | + "-DSQLITE_ENABLE_FTS4", |
| 91 | + "-DSQLITE_ENABLE_FTS5", |
| 92 | + "-DSQLITE_ENABLE_RTREE", |
| 93 | + "-DSQLITE_ENABLE_GEOPOLY", |
| 94 | + "-DSQLITE_HAVE_ZLIB", |
| 95 | + |
| 96 | + # things we set in this gem in addition to the above |
| 97 | + "-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1", |
| 98 | + "-DSQLITE_ENABLE_DBPAGE_VTAB=1", |
| 99 | + "-DSQLITE_ENABLE_DBSTAT_VTAB=1" |
| 100 | + ].join(" ") |
| 101 | + |
| 102 | + append_cppflags(sqlite_cppflags) |
| 103 | + append_cppflags("-DUSING_PACKAGED_LIBRARIES") |
| 104 | + append_cppflags("-DUSING_PRECOMPILED_LIBRARIES") if cross_build? |
103 | 105 | end
|
104 | 106 |
|
105 | 107 | def configure_extension
|
@@ -144,32 +146,10 @@ def configure_extension
|
144 | 146 | have_type("sqlite3_uint64", "sqlite3.h")
|
145 | 147 | end
|
146 | 148 |
|
147 |
| - def minimal_recipe |
148 |
| - require "mini_portile2" |
149 |
| - |
150 |
| - MiniPortile.new(libname, sqlite3_config[:version]).tap do |recipe| |
151 |
| - if sqlite_source_dir |
152 |
| - recipe.source_directory = sqlite_source_dir |
153 |
| - else |
154 |
| - recipe.files = sqlite3_config[:files] |
155 |
| - recipe.target = File.join(package_root_dir, "ports") |
156 |
| - recipe.patch_files = Dir[File.join(package_root_dir, "patches", "*.patch")].sort |
157 |
| - end |
158 |
| - end |
159 |
| - end |
160 |
| - |
161 | 149 | def package_root_dir
|
162 | 150 | File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
|
163 | 151 | end
|
164 | 152 |
|
165 |
| - def sqlite3_config |
166 |
| - mini_portile_config[:sqlite3] |
167 |
| - end |
168 |
| - |
169 |
| - def mini_portile_config |
170 |
| - YAML.load_file(File.join(package_root_dir, "dependencies.yml"), symbolize_names: true) |
171 |
| - end |
172 |
| - |
173 | 153 | def abort_could_not_find(missing)
|
174 | 154 | abort("\nCould not find #{missing}.\nPlease visit https://github.com/sparklemotion/sqlite3-ruby for installation instructions.\n\n")
|
175 | 155 | end
|
@@ -279,6 +259,7 @@ def print_help
|
279 | 259 | end
|
280 | 260 | end
|
281 | 261 | end
|
| 262 | +# rubocop:enable Style/GlobalVars |
282 | 263 |
|
283 | 264 | if arg_config("--help")
|
284 | 265 | Sqlite3::ExtConf.print_help
|
|
0 commit comments