xot 0.1.12 → 0.1.13

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.
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'rake/task'
5
+
6
+
7
+ module Xot
8
+
9
+
10
+ module Rake
11
+
12
+
13
+ class AliasTask < ::Rake::Task
14
+
15
+ def timestamp ()
16
+ prerequisite_tasks.map {|pre| pre.timestamp}.max || ::Rake::EARLY
17
+ end
18
+
19
+ end# AliasTask
20
+
21
+
22
+ end# Rake
23
+
24
+
25
+ end# Xot
26
+
27
+
28
+ module Rake
29
+ module DSL
30
+ def alias_task (*args, &block)
31
+ Xot::Rake::AliasTask.define_task *args, &block
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'rake'
5
+
6
+
7
+ module Rake
8
+ class Application
9
+
10
+ alias invoke_task_org invoke_task
11
+
12
+ def invoke_task (*args, &block)
13
+ invoke_task_org *args, &block
14
+ rescue RuntimeError => e
15
+ if e.message =~ /don't\s+know\s+.*\s+task\s+/i
16
+ escalate_tasks
17
+ else
18
+ raise
19
+ end
20
+ end
21
+
22
+ def escalate_tasks ()
23
+ Dir.chdir '..' do
24
+ cmd = "rake #{ARGV.join ' '}"
25
+ $stderr.puts "(in #{Dir.pwd}) #{cmd}"
26
+ system cmd
27
+ end
28
+ exit 0
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,250 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'erb'
5
+ require 'rbconfig'
6
+
7
+
8
+ module Xot
9
+
10
+
11
+ module Rake
12
+
13
+
14
+ def modules ()
15
+ env(:MODULES, []).map {|m| m::Module}
16
+ end
17
+
18
+ def target ()
19
+ modules.last
20
+ end
21
+
22
+ def target_name ()
23
+ env :MODNAME, target.name.downcase
24
+ end
25
+
26
+ def inc_dir ()
27
+ env :INCDIR, 'include'
28
+ end
29
+
30
+ def src_dir ()
31
+ env :SRCDIR, 'src'
32
+ end
33
+
34
+ def lib_dir ()
35
+ env :LIBDIR, 'lib'
36
+ end
37
+
38
+ def doc_dir ()
39
+ env :DOCDIR, 'doc'
40
+ end
41
+
42
+ def ext_dir ()
43
+ env :EXTDIR, "ext/#{target_name}"
44
+ end
45
+
46
+ def ext_lib_dir ()
47
+ env :EXTLIBDIR, "lib/#{target_name}"
48
+ end
49
+
50
+ def test_dir ()
51
+ env :TESTDIR, 'test'
52
+ end
53
+
54
+ def vendor_dir ()
55
+ env :VENDORDIR, 'vendor'
56
+ end
57
+
58
+ def inc_dirs ()
59
+ env_array(:INCDIRS, []) + modules.reverse.map {|m| m.inc_dir}.flatten
60
+ end
61
+
62
+ def src_dirs ()
63
+ env_array :SRCDIRS, []
64
+ end
65
+
66
+ def src_exts ()
67
+ env_array(:SRCEXTS, []) + %w[c cc cpp m mm]
68
+ end
69
+
70
+ def excludes ()
71
+ env_array :EXCLUDES, []
72
+ end
73
+
74
+ def excluded? (path)
75
+ excludes.any? {|s| path =~ %r{#{s}}}
76
+ end
77
+
78
+ def glob (*patterns)
79
+ paths = []
80
+ patterns.each do |pattern|
81
+ paths.concat Dir.glob(pattern)
82
+ end
83
+ paths
84
+ end
85
+
86
+ def compile_erb (path, out)
87
+ open(path) do |input|
88
+ open(out, 'w') do |output|
89
+ output.write compile_erb_str(input.read)
90
+ end
91
+ end
92
+ #rescue
93
+ end
94
+
95
+ def compile_erb_str (str)
96
+ ERB.new(str, nil, '%').result binding
97
+ end
98
+
99
+ def params (max, sep = '', &block)
100
+ raise 'block not given.' unless block
101
+ return '' if max == 0
102
+ (1..max).map(&block).join(sep)
103
+ end
104
+
105
+ def make_path_map (paths, ext_map)
106
+ paths = paths.map do |path|
107
+ newpath = ext_map.inject path do |value, (from, to)|
108
+ value.sub /#{from.gsub('.', '\.')}$/, to
109
+ end
110
+ raise "map to same path" if path == newpath
111
+ [path, newpath]
112
+ end
113
+ Hash[*paths.flatten]
114
+ end
115
+
116
+ def get_env (name, defval = nil)
117
+ val = ENV[name.to_s] || Object.const_get(name) rescue defval
118
+ val.dup rescue val
119
+ end
120
+
121
+ def env (name, defval = nil)
122
+ case val = get_env(name, defval)
123
+ when /^\d+$/ then val.to_i
124
+ when 'true', true then true
125
+ when 'false', false then false
126
+ when nil then nil
127
+ else val
128
+ end
129
+ end
130
+
131
+ def env_array (name, defval = nil)
132
+ val = get_env name, defval
133
+ val = val.strip.split(/\s+/) if val.kind_of? String
134
+ val
135
+ end
136
+
137
+ def append_env (name, *args)
138
+ ENV[name] = (ENV[name] || '') + " #{args.join ' '}"
139
+ end
140
+
141
+ def make_cppflags (flags = '', defs = [], incdirs = [])
142
+ s = flags.dup
143
+ s += make_cppflags_defs(defs) .map {|s| " -D#{s}"}.join
144
+ s += make_cppflags_incdirs(incdirs).map {|s| " -I#{s}"}.join
145
+ s
146
+ end
147
+
148
+ def make_cppflags_defs (defs = [])
149
+ a = defs.dup
150
+ a << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
151
+ a << (debug? ? '_DEBUG' : 'NDEBUG')
152
+ a << 'WIN32' if win32?
153
+ a << 'OSX' if osx?
154
+ a << 'IOS' if ios?
155
+ a
156
+ end
157
+
158
+ def make_cppflags_incdirs (dirs = [])
159
+ dirs.dup + ruby_inc_dirs
160
+ end
161
+
162
+ def ruby_inc_dirs ()
163
+ root = RbConfig::CONFIG['rubyhdrdir']
164
+ [root, RbConfig::CONFIG['rubyarchhdrdir'] || "#{root}/#{RUBY_PLATFORM}"]
165
+ end
166
+
167
+ def make_cflags (flags = '')
168
+ s = flags.dup
169
+ s << ' -Wno-unknown-pragmas -Wno-reserved-user-defined-literal'
170
+ s << ' -std=c++11' if gcc?
171
+ s << ' -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7' if clang?
172
+ s << ' ' + RbConfig::CONFIG['debugflags'] if debug?
173
+ s.gsub! /-O\d?\w*/, '-O0' if debug?
174
+ s
175
+ end
176
+
177
+ def make_ldflags (flags = '', libdirs = [], frameworks = [])
178
+ s = flags.dup
179
+ s << libdirs.map {|s| " -L#{s}"}.join
180
+ s << frameworks.map {|s| " -framework #{s}"}.join
181
+ s
182
+ end
183
+
184
+ def debug (state)
185
+ ENV['DEBUG'] = state.to_s
186
+ end
187
+
188
+ def debug? ()
189
+ env :DEBUG, false
190
+ end
191
+
192
+ def win32? ()
193
+ RUBY_PLATFORM =~ /mswin|ming|cygwin/
194
+ end
195
+
196
+ def mswin? ()
197
+ RUBY_PLATFORM =~ /mswin/
198
+ end
199
+
200
+ def ming? ()
201
+ RUBY_PLATFORM =~ /ming/
202
+ end
203
+
204
+ def cygwin? ()
205
+ RUBY_PLATFORM =~ /cygwin/
206
+ end
207
+
208
+ def osx? ()
209
+ RUBY_PLATFORM =~ /darwin/
210
+ end
211
+
212
+ def ios? ()
213
+ false
214
+ end
215
+
216
+ def gcc? ()
217
+ RbConfig::CONFIG['CXX'] =~ /(^|\s)g\+\+/i
218
+ end
219
+
220
+ def clang? ()
221
+ RbConfig::CONFIG['CXX'] =~ /(^|\s)clang/i
222
+ end
223
+
224
+ def cxx ()
225
+ env :CXX, RbConfig::CONFIG['CXX'] || 'g++'
226
+ end
227
+
228
+ def ar ()
229
+ env :AR, RbConfig::CONFIG['AR'] || 'ar'
230
+ end
231
+
232
+ def cppflags ()
233
+ flags = env :CPPFLAGS, RbConfig::CONFIG['CPPFLAGS']
234
+ make_cppflags flags, defs, inc_dirs
235
+ end
236
+
237
+ def cxxflags ()
238
+ flags = env :CXXFLAGS, RbConfig::CONFIG['CXXFLAGS']
239
+ make_cflags flags
240
+ end
241
+
242
+ def arflags ()
243
+ env :ARFLAGS, RbConfig::CONFIG['ARFLAGS'] || 'crs'
244
+ end
245
+
246
+
247
+ end# Rake
248
+
249
+
250
+ end# Xot
@@ -18,7 +18,8 @@ module Xot
18
18
  private
19
19
 
20
20
  def set_value__ (name, *values)
21
- raise ArgumentError unless name && !values.empty?
21
+ raise ArgumentError, "set '#{values}' to '#{name}'" if
22
+ !name || name.empty? || values.empty?
22
23
  __send__ "#{name}=", *values
23
24
  end
24
25
 
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ module Xot
5
+
6
+
7
+ module UniversalAccessor
8
+
9
+ def universal_accessor (*names, **names_with_options)
10
+ names.each {|name| define_universal_accessor name}
11
+ names_with_options.each {|name, opts| define_universal_accessor name, opts}
12
+ end
13
+
14
+ private
15
+
16
+ def define_universal_accessor (name, options = {})
17
+ set = "ua_set_#{name}__"
18
+ get = "ua_get_#{name}__"
19
+ class_eval <<-END
20
+ alias_method :#{set}, options[:writer] || :#{name}=
21
+ alias_method :#{get}, options[:reader] || :#{name}
22
+ private :#{set}, :#{get}
23
+ def #{name} (*args)
24
+ #{set} *args unless args.empty?
25
+ #{get}
26
+ end
27
+ END
28
+ end
29
+
30
+ end# UniversalAccessor
31
+
32
+
33
+ end# Xot
34
+
35
+
36
+ class Module
37
+
38
+ include Xot::UniversalAccessor
39
+
40
+ end# Module
@@ -14,14 +14,14 @@ namespace Xot
14
14
  {
15
15
 
16
16
 
17
- #ifdef _DEBUG
17
+ #ifdef XOT_USE_DOUT
18
18
 
19
19
  void
20
20
  dout (const char* format, ...)
21
21
  {
22
22
  va_list args;
23
23
  va_start(args, format);
24
- printf("%s", stringf(format, args).c_str());
24
+ fprintf(stderr, "%s", stringf(format, args).c_str());
25
25
  va_end(args);
26
26
  }
27
27
 
@@ -30,7 +30,7 @@ namespace Xot
30
30
  {
31
31
  va_list args;
32
32
  va_start(args, format);
33
- printf("%s\n", stringf(format, args).c_str());
33
+ fprintf(stderr, "%s\n", stringf(format, args).c_str());
34
34
  va_end(args);
35
35
  }
36
36
 
@@ -2,7 +2,8 @@
2
2
 
3
3
 
4
4
  #include <stdio.h>
5
- #include <boost/scoped_array.hpp>
5
+ #include <algorithm>
6
+ #include <memory>
6
7
 
7
8
 
8
9
  namespace Xot
@@ -18,6 +19,36 @@ namespace Xot
18
19
  {
19
20
  }
20
21
 
22
+ String
23
+ String::upcase () const
24
+ {
25
+ String s = c_str();
26
+ std::transform(
27
+ s.begin(), s.end(), s.begin(),
28
+ [](int c) {return toupper(c);});
29
+ return s;
30
+ }
31
+
32
+ String
33
+ String::downcase () const
34
+ {
35
+ String s = c_str();
36
+ std::transform(
37
+ s.begin(), s.end(), s.begin(),
38
+ [](int c) {return tolower(c);});
39
+ return s;
40
+ }
41
+
42
+ String
43
+ String::strip () const
44
+ {
45
+ String s = c_str();
46
+ auto isspace = [](int c) {return std::isspace(c);};
47
+ auto head = std::find_if_not(s.begin(), s.end(), isspace);
48
+ auto tail = std::find_if( head, s.end(), isspace);
49
+ return String(head, tail);
50
+ }
51
+
21
52
  String::operator const char* () const
22
53
  {
23
54
  return c_str();
@@ -67,7 +98,7 @@ namespace Xot
67
98
  return &stack[0];
68
99
 
69
100
  int bufsize = BUFSIZE;// vscprintf(format, args);
70
- boost::scoped_array<char> heap;
101
+ std::unique_ptr<char[]> heap;
71
102
  while (true)
72
103
  {
73
104
  bufsize *= 2;