xot 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
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