xot 0.1.12 → 0.1.19

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,310 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require 'erb'
5
+ require 'rbconfig'
6
+
7
+
8
+ module Xot
9
+
10
+
11
+ module Rake
12
+
13
+ VERSION_NAME = 'VERSION'
14
+
15
+ def modules ()
16
+ env(:MODULES, []).map {|m| m::Module}
17
+ end
18
+
19
+ def target ()
20
+ modules.last
21
+ end
22
+
23
+ def target_name ()
24
+ env :MODNAME, target.name.downcase
25
+ end
26
+
27
+ def inc_dir ()
28
+ env :INCDIR, 'include'
29
+ end
30
+
31
+ def src_dir ()
32
+ env :SRCDIR, 'src'
33
+ end
34
+
35
+ def lib_dir ()
36
+ env :LIBDIR, 'lib'
37
+ end
38
+
39
+ def doc_dir ()
40
+ env :DOCDIR, 'doc'
41
+ end
42
+
43
+ def ext_dir ()
44
+ env :EXTDIR, "ext/#{target_name}"
45
+ end
46
+
47
+ def ext_lib_dir ()
48
+ env :EXTLIBDIR, "lib/#{target_name}"
49
+ end
50
+
51
+ def test_dir ()
52
+ env :TESTDIR, 'test'
53
+ end
54
+
55
+ def vendor_dir ()
56
+ env :VENDORDIR, 'vendor'
57
+ end
58
+
59
+ def inc_dirs ()
60
+ env_array(:INCDIRS, []) + modules.reverse.map {|m| m.inc_dir}.flatten
61
+ end
62
+
63
+ def src_dirs ()
64
+ env_array :SRCDIRS, []
65
+ end
66
+
67
+ def src_exts ()
68
+ env_array(:SRCEXTS, []) + %w[c cc cpp m mm]
69
+ end
70
+
71
+ def excludes ()
72
+ env_array :EXCLUDES, []
73
+ end
74
+
75
+ def excluded? (path)
76
+ excludes.any? {|s| path =~ %r{#{s}}}
77
+ end
78
+
79
+ def glob (*patterns)
80
+ paths = []
81
+ patterns.each do |pattern|
82
+ paths.concat Dir.glob(pattern)
83
+ end
84
+ paths
85
+ end
86
+
87
+ def filter_file (path, &block)
88
+ File.write path, block.call(File.read path)
89
+ end
90
+
91
+ def cd_sh (dir, cmd)
92
+ Dir.chdir dir do
93
+ $stderr.puts "(in #{Dir.pwd})"
94
+ sh cmd
95
+ end
96
+ end
97
+
98
+ def modified_files (dir: '.', hash: '@')
99
+ `git diff --name-only #{hash} -- #{dir}`.lines.map &:chomp
100
+ end
101
+
102
+ def version_path (dir = nil)
103
+ dir ? "#{dir}/#{VERSION_NAME}" : VERSION_NAME
104
+ end
105
+
106
+ def get_version (dir = nil)
107
+ File.readlines(version_path dir).first.chomp
108
+ end
109
+
110
+ def bump_version (index, version = get_version)
111
+ nums = version.split('.').map &:to_i
112
+ nums << 0 until nums.size > index
113
+ nums[index] += 1
114
+ nums.map!.with_index {|num, i| i > index ? 0 : num}
115
+ nums.pop while nums.last == 0 && nums.size >= 3
116
+ nums.join '.'
117
+ end
118
+
119
+ def bump_version_file (index, dir: nil)
120
+ newver = bump_version index, get_version(dir)
121
+ File.write version_path(dir), newver
122
+ newver
123
+ end
124
+
125
+ def update_and_tag_version (index, dir: nil, &block)
126
+ raise 'modified files exist' unless modified_files.empty?
127
+
128
+ message = ENV['message']
129
+ raise 'no message' unless message
130
+
131
+ newver = bump_version_file index, dir: dir
132
+ raise 'version is not updated' unless modified_files == [version_path(dir)]
133
+
134
+ block.call if block
135
+
136
+ sh %( git add -u )
137
+ sh %( git commit -m "#{message}" )
138
+ sh %( git tag -a -m "#{message}" v#{newver} )
139
+ end
140
+
141
+ def compile_erb (path, out)
142
+ open(path) do |input|
143
+ open(out, 'w') do |output|
144
+ output.write compile_erb_str(input.read)
145
+ end
146
+ end
147
+ #rescue
148
+ end
149
+
150
+ def compile_erb_str (str)
151
+ ERB.new(str, nil, '%').result binding
152
+ end
153
+
154
+ def params (max, sep = '', &block)
155
+ raise 'block not given.' unless block
156
+ return '' if max == 0
157
+ (1..max).map(&block).join(sep)
158
+ end
159
+
160
+ def make_path_map (paths, ext_map)
161
+ paths = paths.map do |path|
162
+ newpath = ext_map.inject path do |value, (from, to)|
163
+ value.sub /#{from.gsub('.', '\.')}$/, to
164
+ end
165
+ raise "map to same path" if path == newpath
166
+ [path, newpath]
167
+ end
168
+ Hash[*paths.flatten]
169
+ end
170
+
171
+ def get_env (name, defval = nil)
172
+ val = ENV[name.to_s] || Object.const_get(name) rescue defval
173
+ val.dup rescue val
174
+ end
175
+
176
+ def env (name, defval = nil)
177
+ case val = get_env(name, defval)
178
+ when /^\d+$/ then val.to_i
179
+ when 'true', true then true
180
+ when 'false', false then false
181
+ when nil then nil
182
+ else val
183
+ end
184
+ end
185
+
186
+ def env_array (name, defval = nil)
187
+ val = get_env name, defval
188
+ val = val.strip.split(/\s+/) if val.kind_of? String
189
+ val
190
+ end
191
+
192
+ def append_env (name, *args)
193
+ ENV[name] = (ENV[name] || '') + " #{args.join ' '}"
194
+ end
195
+
196
+ def make_cppflags (flags = '', defs = [], incdirs = [])
197
+ s = flags.dup
198
+ s += make_cppflags_defs(defs) .map {|s| " -D#{s}"}.join
199
+ s += make_cppflags_incdirs(incdirs).map {|s| " -I#{s}"}.join
200
+ s
201
+ end
202
+
203
+ def make_cppflags_defs (defs = [])
204
+ a = defs.dup
205
+ a << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
206
+ a << (debug? ? '_DEBUG' : 'NDEBUG')
207
+ a << 'WIN32' if win32?
208
+ a << 'OSX' if osx?
209
+ a << 'IOS' if ios?
210
+ a
211
+ end
212
+
213
+ def make_cppflags_incdirs (dirs = [])
214
+ dirs.dup + ruby_inc_dirs
215
+ end
216
+
217
+ def ruby_inc_dirs ()
218
+ root = RbConfig::CONFIG['rubyhdrdir']
219
+ [root, RbConfig::CONFIG['rubyarchhdrdir'] || "#{root}/#{RUBY_PLATFORM}"]
220
+ end
221
+
222
+ def make_cflags (flags = '')
223
+ warning_opts = %w[
224
+ no-unknown-pragmas
225
+ no-deprecated-register
226
+ no-reserved-user-defined-literal
227
+ ]
228
+ s = flags.dup
229
+ s << warning_opts.map {|s| " -W#{s}"}.join
230
+ s << ' -std=c++11' if gcc?
231
+ s << ' -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7' if clang?
232
+ s << ' ' + RbConfig::CONFIG['debugflags'] if debug?
233
+ s.gsub! /-O\d?\w*/, '-O0' if debug?
234
+ s
235
+ end
236
+
237
+ def make_ldflags (flags = '', libdirs = [], frameworks = [])
238
+ s = flags.dup
239
+ s << libdirs.map {|s| " -L#{s}"}.join
240
+ s << frameworks.map {|s| " -framework #{s}"}.join
241
+ s
242
+ end
243
+
244
+ def debug (state)
245
+ ENV['DEBUG'] = state.to_s
246
+ end
247
+
248
+ def debug? ()
249
+ env :DEBUG, false
250
+ end
251
+
252
+ def win32? ()
253
+ RUBY_PLATFORM =~ /mswin|ming|cygwin/
254
+ end
255
+
256
+ def mswin? ()
257
+ RUBY_PLATFORM =~ /mswin/
258
+ end
259
+
260
+ def ming? ()
261
+ RUBY_PLATFORM =~ /ming/
262
+ end
263
+
264
+ def cygwin? ()
265
+ RUBY_PLATFORM =~ /cygwin/
266
+ end
267
+
268
+ def osx? ()
269
+ RUBY_PLATFORM =~ /darwin/
270
+ end
271
+
272
+ def ios? ()
273
+ false
274
+ end
275
+
276
+ def gcc? ()
277
+ RbConfig::CONFIG['CXX'] =~ /(^|\s)g\+\+/i
278
+ end
279
+
280
+ def clang? ()
281
+ RbConfig::CONFIG['CXX'] =~ /(^|\s)clang/i
282
+ end
283
+
284
+ def cxx ()
285
+ env :CXX, RbConfig::CONFIG['CXX'] || 'g++'
286
+ end
287
+
288
+ def ar ()
289
+ env :AR, RbConfig::CONFIG['AR'] || 'ar'
290
+ end
291
+
292
+ def cppflags ()
293
+ flags = env :CPPFLAGS, RbConfig::CONFIG['CPPFLAGS']
294
+ make_cppflags flags, defs, inc_dirs
295
+ end
296
+
297
+ def cxxflags ()
298
+ flags = env :CXXFLAGS, RbConfig::CONFIG['CXXFLAGS']
299
+ make_cflags flags
300
+ end
301
+
302
+ def arflags ()
303
+ env :ARFLAGS, RbConfig::CONFIG['ARFLAGS'] || 'crs'
304
+ end
305
+
306
+
307
+ end# Rake
308
+
309
+
310
+ 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