mkmf-lite 0.7.2 → 0.7.3

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: 7e85aa72d40bbefbc3868cfce08cdadcd27f2715f96aead7b7055808ea724f5f
4
- data.tar.gz: 415625060ad8e4d9d6998f581af4eeb0adb5c69f0a012a827956cfc19f173ff7
3
+ metadata.gz: 726b5a45c22c5700645950241fabc40621f7a1ec9f57a20fffd212623a41acd0
4
+ data.tar.gz: 34bc9e1d6d1c3bba0a9c73cfd7d899fda171054c73dfaaeec6305f246f0fe497
5
5
  SHA512:
6
- metadata.gz: af36e6b2ffc4d90cb1faf28ebe141547b2459819f95caf6b5dded3e51dce35667eb8ea9b0bf81443146495f42c341f56f81d27d3b7b3a7862e9c2a492b4c848d
7
- data.tar.gz: f78fc8d5f051406690b1d7b1b362868be38fd25a45ad140cec40bc9aaf58d0ebdf2a2b53b5c0ca4660954266938be91405660bee3fe85ad0f3a340002d92e25b
6
+ metadata.gz: b5e4afd22216317af2dbb01ea8ead2339976c00276774b1a9e6b5a72e04e6d6ecb097863f6366ce7de93628299440a44b0663db245964d8c30bc310f72d14021
7
+ data.tar.gz: 0d132571eb8b470886c5e2bce7c5b80b0de36ffe563dd929d7ba479173125827a643b8d63584d7b76a6d05c8db72dd1f5c35b095f38cad707d06d29541c4103c
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.7.3 - 21-Mar-2025
2
+ * Add check_offsetof method.
3
+
1
4
  ## 0.7.2 - 13-Mar-2025
2
5
  * Allow option of adding directories to check_sizeof and check_valueof methods.
3
6
 
data/lib/mkmf/lite.rb CHANGED
@@ -16,7 +16,7 @@ module Mkmf
16
16
  extend Memoist
17
17
 
18
18
  # The version of the mkmf-lite library
19
- MKMF_LITE_VERSION = '0.7.2'
19
+ MKMF_LITE_VERSION = '0.7.3'
20
20
 
21
21
  private
22
22
 
@@ -184,6 +184,38 @@ module Mkmf
184
184
 
185
185
  memoize :check_sizeof
186
186
 
187
+ # Returns the offset of +field+ within +struct_type+ using +headers+,
188
+ # or common headers, plus stddef.h, if no headers are specified.
189
+ #
190
+ # If this method fails an error is raised. This could happen if the field
191
+ # can't be found and/or the header files do not include the indicated type.
192
+ # It will also fail if the field is a bit field.
193
+ #
194
+ # Example:
195
+ #
196
+ # class Foo
197
+ # include Mkmf::Lite
198
+ # utsname = check_offsetof('struct utsname', 'release', 'sys/utsname.h')
199
+ # end
200
+ #
201
+ def check_offsetof(struct_type, field, headers = [], *directories)
202
+ headers = get_header_string(headers)
203
+ erb = ERB.new(read_template('check_offsetof.erb'))
204
+ code = erb.result(binding)
205
+
206
+ if directories.empty?
207
+ options = nil
208
+ else
209
+ options = ''
210
+ directories.each{ |dir| options += "-I#{dir} " }
211
+ options.rstrip!
212
+ end
213
+
214
+ try_to_execute(code, options)
215
+ end
216
+
217
+ memoize :check_offsetof
218
+
187
219
  private
188
220
 
189
221
  # Take an array of header file names (or convert it to an array if it's a
@@ -0,0 +1,11 @@
1
+ #include <stdio.h>
2
+ #include <stddef.h>
3
+
4
+ <%= headers %>
5
+
6
+ int conftest_const = (int)(offsetof(<%= struct_type %>, <%= field %>));
7
+
8
+ int main(){
9
+ printf("%d\n", conftest_const);
10
+ return 0;
11
+ }
data/mkmf-lite.gemspec CHANGED
@@ -3,7 +3,7 @@ require 'rubygems'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'mkmf-lite'
5
5
  spec.summary = 'A lighter version of mkmf designed for use as a library'
6
- spec.version = '0.7.2'
6
+ spec.version = '0.7.3'
7
7
  spec.author = 'Daniel J. Berger'
8
8
  spec.license = 'Apache-2.0'
9
9
  spec.email = 'djberg96@gmail.com'
@@ -20,7 +20,7 @@ RSpec.describe Mkmf::Lite do
20
20
 
21
21
  describe 'constants' do
22
22
  example 'version information' do
23
- expect(described_class::MKMF_LITE_VERSION).to eq('0.7.2')
23
+ expect(described_class::MKMF_LITE_VERSION).to eq('0.7.3')
24
24
  expect(described_class::MKMF_LITE_VERSION).to be_frozen
25
25
  end
26
26
  end
@@ -112,6 +112,33 @@ RSpec.describe Mkmf::Lite do
112
112
  end
113
113
  end
114
114
 
115
+ context 'check_offsetof' do
116
+ let(:st_field){ 'st_dev' }
117
+
118
+ example 'check_offsetof basic functionality' do
119
+ expect(subject).to respond_to(:check_offsetof)
120
+ expect{ subject.check_offsetof(st_type, st_field, st_header) }.not_to raise_error
121
+ end
122
+
123
+ example 'check_offsetof requires at least two arguments' do
124
+ expect{ subject.check_offsetof }.to raise_error(ArgumentError)
125
+ expect{ subject.check_offsetof(st_type) }.to raise_error(ArgumentError)
126
+ end
127
+
128
+ example 'check_offsetof accepts directory arguments' do
129
+ expect{ subject.check_offsetof(st_type, st_field, [st_header, 'stdlib.h'], ['/usr/include']) }.not_to raise_error
130
+ end
131
+
132
+ example 'check_offsetof returns an integer value' do
133
+ size1 = subject.check_offsetof(st_type, st_field, st_header)
134
+ size2 = subject.check_offsetof(st_type, 'st_ino', st_header)
135
+ expect(size1).to be_a(Integer)
136
+ expect(size2).to be_a(Integer)
137
+ expect(size1).to eq(0)
138
+ expect(size2).to be > size1
139
+ end
140
+ end
141
+
115
142
  context 'check_sizeof' do
116
143
  example 'check_sizeof basic functionality' do
117
144
  expect(subject).to respond_to(:check_sizeof)
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mkmf-lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain:
10
11
  - |
@@ -34,7 +35,7 @@ cert_chain:
34
35
  ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
35
36
  WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
36
37
  -----END CERTIFICATE-----
37
- date: 2025-03-13 00:00:00.000000000 Z
38
+ date: 2025-03-22 00:00:00.000000000 Z
38
39
  dependencies:
39
40
  - !ruby/object:Gem::Dependency
40
41
  name: ptools
@@ -140,6 +141,7 @@ files:
140
141
  - certs/djberg96_pub.pem
141
142
  - lib/mkmf-lite.rb
142
143
  - lib/mkmf/lite.rb
144
+ - lib/mkmf/templates/check_offsetof.erb
143
145
  - lib/mkmf/templates/check_sizeof.erb
144
146
  - lib/mkmf/templates/check_valueof.erb
145
147
  - lib/mkmf/templates/have_func.erb
@@ -161,6 +163,7 @@ metadata:
161
163
  rubygems_mfa_required: 'true'
162
164
  github_repo: https://github.com/djberg96/mkmf-lite
163
165
  funding_uri: https://github.com/sponsors/djberg96
166
+ post_install_message:
164
167
  rdoc_options: []
165
168
  require_paths:
166
169
  - lib
@@ -175,7 +178,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
178
  - !ruby/object:Gem::Version
176
179
  version: '0'
177
180
  requirements: []
178
- rubygems_version: 3.6.5
181
+ rubygems_version: 3.5.22
182
+ signing_key:
179
183
  specification_version: 4
180
184
  summary: A lighter version of mkmf designed for use as a library
181
185
  test_files:
metadata.gz.sig CHANGED
Binary file