xot 0.1.12 → 0.1.13

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