xot 0.2 → 0.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: 9592ba7adfc21223d2bc9f0035665c4cd12c6ab194bfbb0d445510c908e56812
4
- data.tar.gz: 40dd5584ff274a815e0791076216cd188df05b5e712eb156d7e52f62da20e9bb
3
+ metadata.gz: 7d11136d38c0cd9cd9dcca16148115795071e958e05ef3d5b307bd385905c1f6
4
+ data.tar.gz: 7af44d2bcd37badd34c4d5493bc21c5357fcde972b89d9a1833b1e70f5fe12d7
5
5
  SHA512:
6
- metadata.gz: 8d3de874655db69b4a9e0a569de98ffb3d3bd80950602b8f27a1a6f024e673a6ebc641611067799569598373696eba1149d9359898116033b49630a8dba9915a
7
- data.tar.gz: e5a5b77c96cb68ae8cd8d0c692fc4f6ccf326afb6f0827ca68d038a4dc9a5531a8b86c15aec0ec4f13f5317c590f647442c0ff7b2b98b9d25c74825535d0aede
6
+ metadata.gz: ca6c659c661dd12179e968b8a832951cb6a812e0f4155ebb29d807147cae2ba6960c51d823f68a47bc070db4a8070441ba22285f67975686ee31928fa1e8cb90
7
+ data.tar.gz: 9c640bcc810ff7c6143f63936f753bb544f0b939f1c15c4e685b420e614db7e8d8bdcf9b0d105089b727585d9712991dcd0a4f8fd3d183994ae368c1e66ea569
@@ -15,7 +15,7 @@ jobs:
15
15
  ruby-version: 3.2
16
16
 
17
17
  - name: checkout
18
- uses: actions/checkout@v2
18
+ uses: actions/checkout@v4
19
19
 
20
20
  - name: setup gems
21
21
  run: bundle install
@@ -24,7 +24,7 @@ jobs:
24
24
  run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
25
25
 
26
26
  - name: test
27
- run: bundle exec rake quiet test
27
+ run: bundle exec rake quiet packages test
28
28
 
29
29
  - name: create gem
30
30
  id: gem
@@ -15,7 +15,7 @@ jobs:
15
15
  ruby-version: 3.2
16
16
 
17
17
  - name: checkout
18
- uses: actions/checkout@v2
18
+ uses: actions/checkout@v4
19
19
  with:
20
20
  fetch-depth: 0
21
21
  token: ${{ secrets.PAT }}
@@ -16,7 +16,7 @@ jobs:
16
16
  ruby-version: 3.2
17
17
 
18
18
  - name: checkout
19
- uses: actions/checkout@v2
19
+ uses: actions/checkout@v4
20
20
 
21
21
  - name: setup gems
22
22
  run: bundle install
@@ -24,5 +24,14 @@ jobs:
24
24
  - name: setup dependencies
25
25
  run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
26
26
 
27
+ - name: packages
28
+ run: bundle exec rake packages
29
+
30
+ - name: lib
31
+ run: bundle exec rake lib
32
+
33
+ - name: ext
34
+ run: bundle exec rake ext
35
+
27
36
  - name: test
28
37
  run: bundle exec rake test
data/ChangeLog.md CHANGED
@@ -1,6 +1,22 @@
1
1
  # xot ChangeLog
2
2
 
3
3
 
4
+ ## [v0.3] - 2024-07-06
5
+
6
+ - Support Windows
7
+
8
+
9
+ ## [v0.2.1] - 2024-07-05
10
+
11
+ - Add xot/util.rb
12
+ - Add system_error_text()
13
+ - Add get_refc_count() for debugging
14
+ - Add 'packages' task
15
+ - Update workflows for test
16
+ - Update to actions/checkout@v4
17
+ - Fix 'github_actions?'
18
+
19
+
4
20
  ## [v0.2] - 2024-03-14
5
21
 
6
22
  - v0.2
data/Gemfile.lock CHANGED
@@ -9,7 +9,7 @@ GEM
9
9
 
10
10
  PLATFORMS
11
11
  arm64-darwin-21
12
- x86_64-darwin-20
12
+ arm64-darwin-22
13
13
 
14
14
  DEPENDENCIES
15
15
  rake
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2
1
+ 0.3
@@ -40,7 +40,9 @@ namespace Xot
40
40
  };
41
41
 
42
42
 
43
- String error_text (const char* file, int line, const char* str);
43
+ String error_text (const char* file, int line, const char* str);
44
+
45
+ String system_error_text (const char* file, int line, const char* str);
44
46
 
45
47
 
46
48
  namespace ErrorFunctions
data/include/xot/ref.h CHANGED
@@ -71,6 +71,13 @@ namespace Xot
71
71
  return false;
72
72
  }
73
73
 
74
+ #ifdef _DEBUG
75
+ int get_refc_count () const
76
+ {
77
+ return refc_count;
78
+ }
79
+ #endif
80
+
74
81
  protected:
75
82
 
76
83
  RefCountable ()
@@ -0,0 +1,15 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __XOT_WINDOWS_H__
4
+ #define __XOT_WINDOWS_H__
5
+
6
+
7
+ #ifdef WIN32
8
+ #undef _WIN32_WINNT
9
+ #define _WIN32_WINNT _WIN32_WINNT_WIN7
10
+ #include <windows.h>
11
+ #include <windowsx.h>
12
+ #endif
13
+
14
+
15
+ #endif//EOH
data/include/xot.h CHANGED
@@ -15,5 +15,7 @@
15
15
  #include <xot/noncopyable.h>
16
16
  #include <xot/util.h>
17
17
 
18
+ //#include <xot/windows.h>
19
+
18
20
 
19
21
  #endif//EOH
data/lib/xot/extconf.rb CHANGED
@@ -1,5 +1,6 @@
1
- require 'xot/rake/util'
2
1
  require 'xot/block_util'
2
+ require 'xot/util'
3
+ require 'xot/rake/util'
3
4
 
4
5
 
5
6
  module Xot
@@ -8,6 +9,7 @@ module Xot
8
9
  class ExtConf
9
10
 
10
11
  include Xot::Rake
12
+ include Xot::Util
11
13
 
12
14
  attr_reader :extensions, :defs, :inc_dirs, :lib_dirs, :headers, :libs, :local_libs, :frameworks
13
15
 
@@ -27,8 +29,8 @@ module Xot
27
29
 
28
30
  extensions.each do |ext|
29
31
  name = ext.name.downcase
30
- headers << "#{name}.h"
31
- libs << name
32
+ headers << "#{name}.h"
33
+ local_libs << name
32
34
  end
33
35
 
34
36
  ldflags = $LDFLAGS.dup
@@ -43,7 +45,7 @@ module Xot
43
45
  $CFLAGS = make_cflags $CFLAGS + ' -x c++'
44
46
  $CXXFLAGS = make_cflags $CXXFLAGS + ' -x c++' if $CXXFLAGS
45
47
  $LDFLAGS = make_ldflags ldflags, lib_dirs, frameworks
46
- $LOCAL_LIBS << local_libs.map {|s| " -l#{s}"}.join
48
+ $LOCAL_LIBS << local_libs.reverse.map {|s| " -l#{s}"}.join
47
49
  end
48
50
 
49
51
  def create_makefile(*args)
data/lib/xot/rake/util.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'erb'
2
2
  require 'rbconfig'
3
+ require 'xot/util'
3
4
 
4
5
 
5
6
  module Xot
@@ -7,6 +8,8 @@ module Xot
7
8
 
8
9
  module Rake
9
10
 
11
+ include Xot::Util
12
+
10
13
  def extensions()
11
14
  env(:EXTENSIONS, []).map {|m| m::Extension}
12
15
  end
@@ -52,7 +55,10 @@ module Xot
52
55
  end
53
56
 
54
57
  def inc_dirs()
55
- env_array(:INCDIRS, []) + extensions.reverse.map {|m| m.inc_dir}.flatten
58
+ dirs = env_array :INCDIRS, []
59
+ dirs += extensions.reverse.map {|m| m.inc_dir}.flatten
60
+ dirs << "#{env :MINGW_PREFIX}/include" if mingw?
61
+ dirs
56
62
  end
57
63
 
58
64
  def src_dirs()
@@ -167,11 +173,15 @@ module Xot
167
173
 
168
174
  def make_cppflags_defs(defs = [])
169
175
  a = defs.dup
170
- a << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
171
176
  a << (debug? ? '_DEBUG' : 'NDEBUG')
172
- a << 'WIN32' if win32?
173
- a << 'OSX' if osx?
174
- a << 'IOS' if ios?
177
+ a << target.name.upcase
178
+ a << $~[0].upcase if RUBY_PLATFORM =~ /mswin|mingw|cygwin|darwin/i
179
+ a << 'WIN32' if win32?
180
+ a << 'OSX' if osx?
181
+ a << 'IOS' if ios?
182
+ a << 'GCC' if gcc?
183
+ a << 'CLANG' if clang?
184
+ a << '_USE_MATH_DEFINES' if gcc?
175
185
  a
176
186
  end
177
187
 
@@ -189,11 +199,11 @@ module Xot
189
199
  end
190
200
 
191
201
  def make_cflags(flags = '')
192
- warning_opts = %w[
193
- no-unknown-pragmas
202
+ warning_opts = %w[no-unknown-pragmas]
203
+ warning_opts += %w[
194
204
  no-deprecated-register
195
205
  no-reserved-user-defined-literal
196
- ]
206
+ ] if clang?
197
207
  s = flags.dup
198
208
  s << warning_opts.map {|s| " -W#{s}"}.join
199
209
  s << " -arch arm64" if RUBY_PLATFORM =~ /arm64-darwin/
@@ -224,46 +234,6 @@ module Xot
224
234
  env :DEBUG, false
225
235
  end
226
236
 
227
- def ci?()
228
- github_actions?
229
- end
230
-
231
- def github_actions?()
232
- env :GITHUB_ACTIONS, false
233
- end
234
-
235
- def win32?()
236
- RUBY_PLATFORM =~ /mswin|ming|cygwin/
237
- end
238
-
239
- def mswin?()
240
- RUBY_PLATFORM =~ /mswin/
241
- end
242
-
243
- def ming?()
244
- RUBY_PLATFORM =~ /ming/
245
- end
246
-
247
- def cygwin?()
248
- RUBY_PLATFORM =~ /cygwin/
249
- end
250
-
251
- def osx?()
252
- RUBY_PLATFORM =~ /darwin/
253
- end
254
-
255
- def ios?()
256
- false
257
- end
258
-
259
- def gcc?()
260
- RbConfig::CONFIG['CXX'] =~ /(^|\s)g\+\+/i
261
- end
262
-
263
- def clang?()
264
- RbConfig::CONFIG['CXX'] =~ /(^|\s)clang/i
265
- end
266
-
267
237
  def cxx()
268
238
  env :CXX, RbConfig::CONFIG['CXX'] || 'g++'
269
239
  end
data/lib/xot/rake.rb CHANGED
@@ -12,7 +12,6 @@ module Xot
12
12
 
13
13
  module Rake
14
14
 
15
-
16
15
  def srcs_map()
17
16
  paths = glob("#{src_dir}/**/*.{#{src_exts.join ','}}") +
18
17
  erbs_map.values.grep(/\.(#{src_exts.join '|'})$/)
@@ -273,6 +272,20 @@ module Xot
273
272
  end
274
273
  end
275
274
 
275
+ def install_packages(osx: [], win32: [])
276
+ desc "install packages"
277
+ task :packages do
278
+ case
279
+ when osx? && osx.size > 0
280
+ sh %( brew install #{osx.join ' '} )
281
+ when win32? && win32.size > 0
282
+ prefix = 'MINGW_PACKAGE_PREFIX'
283
+ packages = win32.map {|package| package.sub prefix, ENV[prefix]}
284
+ sh %( pacman -S --noconfirm #{packages.join ' '} )
285
+ end
286
+ end
287
+ end
288
+
276
289
  def use_external_library(
277
290
  repos, branch: nil, tag: nil, commit: nil,
278
291
  incdirs: nil, srcdirs: nil, excludes: [],
@@ -346,11 +359,14 @@ module Xot
346
359
  end
347
360
 
348
361
  def define_placeholder_tasks()
349
- desc "delete temporary files"
350
- alias_task :clean
362
+ desc "install all external packages"
363
+ alias_task :packages
351
364
 
352
- desc "delete all generated files"
353
- alias_task :clobber => :clean
365
+ desc "setup all external libraries"
366
+ alias_task :vendor
367
+
368
+ desc "convert erb files"
369
+ alias_task :erb
354
370
 
355
371
  desc "build native library"
356
372
  alias_task :lib
@@ -358,20 +374,20 @@ module Xot
358
374
  desc "build ruby extension"
359
375
  alias_task :ext
360
376
 
361
- desc "build ruby gem"
362
- alias_task :gem
377
+ desc "run all tests"
378
+ alias_task :test
363
379
 
364
380
  desc "generate documentations"
365
381
  alias_task :doc
366
382
 
367
- desc "run all tests"
368
- alias_task :test
383
+ desc "build ruby gem"
384
+ alias_task :gem
369
385
 
370
- desc "setup all external libraries"
371
- alias_task :vendor
386
+ desc "delete temporary files"
387
+ alias_task :clean
372
388
 
373
- desc "convert erb files"
374
- alias_task :erb
389
+ desc "delete all generated files"
390
+ alias_task :clobber => :clean
375
391
  end
376
392
 
377
393
 
data/lib/xot/test.rb CHANGED
@@ -1,8 +1,13 @@
1
+ require 'xot/util'
2
+
3
+
1
4
  module Xot
2
5
 
3
6
 
4
7
  module Test
5
8
 
9
+ include Util
10
+
6
11
  def assert_not(expression, *args)
7
12
  assert !expression, *args
8
13
  end
data/lib/xot/util.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'rbconfig'
2
+
3
+
4
+ module Xot
5
+
6
+
7
+ extend module Util
8
+
9
+ def osx?()
10
+ /darwin/.match? RUBY_PLATFORM
11
+ end
12
+
13
+ def ios?()
14
+ false
15
+ end
16
+
17
+ def win32?()
18
+ /mswin|ming|cygwin/.match? RUBY_PLATFORM
19
+ end
20
+
21
+ def mswin?()
22
+ /mswin/.match? RUBY_PLATFORM
23
+ end
24
+
25
+ def mingw?()
26
+ /ming/.match? RUBY_PLATFORM
27
+ end
28
+
29
+ def cygwin?()
30
+ /cygwin/.match? RUBY_PLATFORM
31
+ end
32
+
33
+ def gcc?()
34
+ /(^|\s)g\+\+/i.match? RbConfig::CONFIG['CXX']
35
+ end
36
+
37
+ def clang?()
38
+ /(^|\s)clang/i.match? RbConfig::CONFIG['CXX']
39
+ end
40
+
41
+ def github_actions?()
42
+ ENV['GITHUB_ACTIONS'] == 'true'
43
+ end
44
+
45
+ alias ci? github_actions?
46
+
47
+ self
48
+
49
+ end# Util
50
+
51
+
52
+ end# Xot
data/lib/xot.rb CHANGED
@@ -10,3 +10,4 @@ require 'xot/inspectable'
10
10
  require 'xot/invoker'
11
11
  require 'xot/setter'
12
12
  require 'xot/universal_accessor'
13
+ require 'xot/util'
data/src/exception.cpp CHANGED
@@ -1,6 +1,9 @@
1
1
  #include "xot/exception.h"
2
2
 
3
3
 
4
+ #include "xot/windows.h"
5
+
6
+
4
7
  namespace Xot
5
8
  {
6
9
 
@@ -37,6 +40,34 @@ namespace Xot
37
40
  return s;
38
41
  }
39
42
 
43
+ String
44
+ system_error_text (const char* file, int line, const char* str)
45
+ {
46
+ String s = str;
47
+
48
+ #ifdef WIN32
49
+ DWORD lasterror = GetLastError();
50
+ if (lasterror != 0)
51
+ {
52
+ LPVOID msg = NULL;
53
+ DWORD flags =
54
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
55
+ FORMAT_MESSAGE_FROM_SYSTEM |
56
+ FORMAT_MESSAGE_IGNORE_INSERTS;
57
+ if (FormatMessageA(
58
+ flags, NULL, lasterror, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
59
+ (LPSTR) &msg, 0, NULL))
60
+ {
61
+ String m = (LPCSTR) msg;
62
+ if (!m.empty()) s += ": " + m;
63
+ }
64
+ LocalFree(msg);
65
+ }
66
+ #endif
67
+
68
+ return error_text(file, line, s);
69
+ }
70
+
40
71
 
41
72
  namespace ErrorFunctions
42
73
  {
@@ -73,7 +104,7 @@ namespace Xot
73
104
  system_error (const char* file, int line, const char* format, ...)
74
105
  {
75
106
  XOT_STRINGF(format, s);
76
- throw SystemError(error_text(file, line, s));
107
+ throw SystemError(system_error_text(file, line, s));
77
108
  }
78
109
 
79
110
  void
data/src/string.cpp CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  #include <stdio.h>
5
+ #include <string.h>
5
6
  #include <algorithm>
6
7
  #include <memory>
7
8
  #include "xot/exception.h"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xot
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-13 00:00:00.000000000 Z
11
+ date: 2024-07-05 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This library include some useful utility classes and functions for development
14
14
  with C++.
@@ -41,6 +41,7 @@ files:
41
41
  - include/xot/string.h
42
42
  - include/xot/time.h
43
43
  - include/xot/util.h
44
+ - include/xot/windows.h
44
45
  - lib/xot.rb
45
46
  - lib/xot/bit_flag.rb
46
47
  - lib/xot/bit_flag_accessor.rb
@@ -59,6 +60,7 @@ files:
59
60
  - lib/xot/setter.rb
60
61
  - lib/xot/test.rb
61
62
  - lib/xot/universal_accessor.rb
63
+ - lib/xot/util.rb
62
64
  - src/debug.cpp
63
65
  - src/exception.cpp
64
66
  - src/string.cpp