diff --git a/.github/workflows/sqlite3-ruby.yml b/.github/workflows/sqlite3-ruby.yml index 2c0667dd..dc897991 100644 --- a/.github/workflows/sqlite3-ruby.yml +++ b/.github/workflows/sqlite3-ruby.yml @@ -86,7 +86,7 @@ jobs: steps: - run: | dnf group install -y "C Development Tools and Libraries" - dnf install -y ruby ruby-devel libyaml-devel + dnf install -y ruby ruby-devel libyaml-devel git-all - uses: actions/checkout@v4 - run: bundle install - run: bundle exec rake compile -- --disable-system-libraries diff --git a/Gemfile b/Gemfile index 65cbbf4d..0f310ba2 100644 --- a/Gemfile +++ b/Gemfile @@ -9,3 +9,5 @@ gem("rdoc", "6.5.0") gem("psych", "5.1.0") gem("ruby_memcheck", "2.1.2") if Gem::Platform.local.os == "linux" + +gem "mini_portile2", git: "https://github.com/flavorjones/mini_portile", ref: "9ea08f7b" diff --git a/ext/sqlite3/extconf.rb b/ext/sqlite3/extconf.rb index 8d266c7c..fc5a8f8b 100644 --- a/ext/sqlite3/extconf.rb +++ b/ext/sqlite3/extconf.rb @@ -48,47 +48,29 @@ def configure_system_libraries end def configure_packaged_libraries - minimal_recipe.tap do |recipe| - recipe.configure_options += ["--enable-shared=no", "--enable-static=yes"] - ENV.to_h.tap do |env| - user_cflags = with_config("sqlite-cflags") - more_cflags = [ - "-fPIC", # needed for linking the static library into a shared library - "-O2", # see https://github.com/sparklemotion/sqlite3-ruby/issues/335 for some benchmarks - "-fvisibility=hidden", # see https://github.com/rake-compiler/rake-compiler-dock/issues/87 - ] - env["CFLAGS"] = [user_cflags, env["CFLAGS"], more_cflags].flatten.join(" ") - recipe.configure_options += env.select { |k,v| ENV_ALLOWLIST.include?(k) } - .map { |key, value| "#{key}=#{value.strip}" } - end - - unless File.exist?(File.join(recipe.target, recipe.host, recipe.name, recipe.version)) - recipe.cook - end - recipe.activate - - # on macos, pkg-config will not return --cflags without this - ENV["PKG_CONFIG_ALLOW_SYSTEM_CFLAGS"] = "t" - - # only needed for Ruby 3.1.3, see https://bugs.ruby-lang.org/issues/19233 - RbConfig::CONFIG["PKG_CONFIG"] = config_string("PKG_CONFIG") || "pkg-config" + recipe = minimal_recipe + + recipe.configure_options += ["--enable-shared=no", "--enable-static=yes"] + ENV.to_h.tap do |env| + user_cflags = with_config("sqlite-cflags") + more_cflags = [ + "-fPIC", # needed for linking the static library into a shared library + "-O2", # see https://github.com/sparklemotion/sqlite3-ruby/issues/335 for some benchmarks + "-fvisibility=hidden", # see https://github.com/rake-compiler/rake-compiler-dock/issues/87 + ] + env["CFLAGS"] = [user_cflags, env["CFLAGS"], more_cflags].flatten.join(" ") + recipe.configure_options += env.select { |k,v| ENV_ALLOWLIST.include?(k) } + .map { |key, value| "#{key}=#{value.strip}" } + end - lib_path = File.join(recipe.path, "lib") - pcfile = File.join(lib_path, "pkgconfig", "sqlite3.pc") - abort_pkg_config("pkg_config") unless pkg_config(pcfile) + unless File.exist?(File.join(recipe.target, recipe.host, recipe.name, recipe.version)) + recipe.cook + end - # see https://bugs.ruby-lang.org/issues/18490 - ldflags = xpopen(["pkg-config", "--libs", "--static", pcfile], err: [:child, :out], &:read) - abort_pkg_config("xpopen") unless $?.success? - ldflags = ldflags.split + lib_path = File.join(recipe.path, "lib") + pcfile = File.join(lib_path, "pkgconfig", "sqlite3.pc") - # see https://github.com/flavorjones/mini_portile/issues/118 - "-L#{lib_path}".tap do |lib_path_flag| - ldflags.prepend(lib_path_flag) unless ldflags.include?(lib_path_flag) - end - - ldflags.each { |ldflag| append_ldflags(ldflag) } - end + MiniPortile.activate_mkmf(pkgconf: pcfile) end def configure_extension