xot 0.1.12 → 0.1.19

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,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