gem-ext-zig_builder 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6419f1ac0a59e19c259a8efce1fbef996083eb8489f6e76e8ed9a73ee7f3a36
4
- data.tar.gz: d5754f2f5ed48b0faebc888aa675531a9c99ec815f6ed67386a8ebc8d9b8a4d9
3
+ metadata.gz: 55b4bf2fe202be13789c3afbc3fc71d515d49f56b08b92720cd882ebed52d13d
4
+ data.tar.gz: 7fee2a3b6f222b25ce72b95275cdb8be2b2c61ca0948a44ae12f4d5098649e77
5
5
  SHA512:
6
- metadata.gz: 3c625b25dff418ecaefac4aaed38441ae96f669bab96476e3ab7e2ae1538bffb85bdf743044b8d9260ec8ee363857d631004140730d3a9b8769924b5882956e2
7
- data.tar.gz: 1af95db95f3f24293804ca784dc14948c9daeda2dbb649c4a9590b122487c2ab9cda6eb58f3e7f0acd35212e90eedc71ac40a96fbec27a4a48b2f37163a8681c
6
+ metadata.gz: 38802825ac0b746613ef0fba7447db7cda21879eaef100307689a083e3f05640ccea6adce95f2805b0d5ce2af2150fc1a21a06b1b769a0f2875c060a62cba970
7
+ data.tar.gz: 570fd46fc68606563c097b858e763ea92564d3189e6bba9f43971ea591403bd4561033fbe073afafd5318d16b2c5d095abf672a0e45119b0d30f7f949e6aaf54
@@ -2,7 +2,7 @@ module Gem
2
2
  module Ext
3
3
  class Builder; end
4
4
  class ZigBuilder < Builder
5
- VERSION = '0.1.0'
5
+ VERSION = '0.2.1'
6
6
  end
7
7
  end
8
8
  end
@@ -4,49 +4,54 @@ require 'rubygems/ext/builder'
4
4
  require 'rubygems/command'
5
5
  require 'shellwords'
6
6
  require 'rbconfig'
7
+ require 'tmpdir'
7
8
 
8
- class Gem::Ext::Builder
9
- def builder_for(extension) # :nodoc:
10
- case extension
11
- when /extconf/ then
12
- Gem::Ext::ExtConfBuilder
13
- when /configure/ then
14
- Gem::Ext::ConfigureBuilder
15
- when /rakefile/i, /mkrf_conf/i then
16
- @ran_rake = true
17
- Gem::Ext::RakeBuilder
18
- when /CMakeLists.txt/ then
19
- Gem::Ext::CmakeBuilder
20
- when /build.zig/ then
21
- Gem::Ext::ZigBuilder
22
- else
23
- extension_dir = File.join @gem_dir, File.dirname(extension)
24
-
25
- message = "No builder for extension '#{extension}'"
26
- build_error extension_dir, message
9
+ class Gem::Ext::ZigBuilder < Gem::Ext::Builder
10
+ module PatchBuilderLookup
11
+ def builder_for(extension)
12
+ /build.zig/ === extension ? Gem::Ext::ZigBuilder : super
27
13
  end
28
14
  end
29
- end
30
15
 
31
- class Gem::Ext::ZigBuilder < Gem::Ext::Builder
32
16
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=nil)
17
+ tmp_dir = Dir.mktmpdir
18
+ dlext = RbConfig::CONFIG['DLEXT']
19
+ target_vendor = RbConfig::CONFIG['target_vendor']
20
+ pkg_config_path = "#{RbConfig::CONFIG['libdir']}/pkgconfig"
21
+ ruby_pc = "#{File.basename(RbConfig::CONFIG['ruby_pc'], '.pc')}"
22
+
23
+ cmd = [].tap {|c|
24
+ c << 'zig' << 'build' << '-Doptimize=ReleaseSafe'
25
+ c << '--prefix-lib-dir' << tmp_dir
26
+ c << 'test' << 'install'
27
+ }
28
+
33
29
  # older versions of ruby do not support the 5th `env` argument to run,
34
30
  # so pollute the global ENV as a cheap workaround
35
- ENV['PKG_CONFIG_PATH'] = "#{RbConfig::CONFIG['libdir']}/pkgconfig"
36
- ENV['RUBY_PC' ] = "#{File.basename(RbConfig::CONFIG['ruby_pc'], '.pc')}"
37
-
38
- run(
39
- [].tap {|c|
40
- c << 'zig' << 'build' << '-Doptimize=ReleaseSafe'
41
- c << '--prefix-lib-dir' << dest_path
42
- c << Gem::Command.build_args unless Gem::Command.build_args.empty?
43
- c << 'test' << 'install'
44
- },
45
- results,
46
- 'zig',
47
- extension_dir
48
- )
31
+ ENV['PKG_CONFIG_PATH'] = pkg_config_path
32
+ ENV['RUBY_PC' ] = ruby_pc
33
+
34
+ # even older versions of ruby do not support the 4th extension_dir arg
35
+ Dir.chdir(extension_dir ? extension_dir : '.') do
36
+ run(cmd, results, 'zig')
37
+ end
38
+
39
+ Dir.chdir tmp_dir do
40
+ if target_vendor == 'apple' && dlext == 'bundle'
41
+ Dir.glob('*.dylib').each do |dylib|
42
+ FileUtils.mv dylib, "#{File.basename(dylib, '.dylib')}.bundle"
43
+ end
44
+ end
45
+
46
+ FileUtils.mv Dir.glob("*.#{dlext}"), dest_path
47
+ end
49
48
 
50
49
  results
50
+ ensure
51
+ FileUtils.remove_entry tmp_dir if tmp_dir
51
52
  end
52
53
  end
54
+
55
+ class Gem::Ext::Builder
56
+ prepend Gem::Ext::ZigBuilder::PatchBuilderLookup
57
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-ext-zig_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank J. Cameron
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-05 00:00:00.000000000 Z
11
+ date: 2023-05-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ''
14
14
  email: