Mxx_ru 1.6.9 → 1.6.10.1

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
  SHA1:
3
- metadata.gz: 900a8a18e1efa1c39330786397ab24d107af3421
4
- data.tar.gz: e48a95783c74c51fca524464a001476373fbd1d9
3
+ metadata.gz: c4a5d6f710b5089948eef9011789f6b721aa283d
4
+ data.tar.gz: 4b6dcd63781c43e5073131dbefab3abc965abbbc
5
5
  SHA512:
6
- metadata.gz: 0163b66595b96b7859c21b3e7f9d399cd173e014aaa3c43dadfa22986e631ad6495089d602a6b9380db66876fffa64c95669c7823b55cd8e0157be8106086ab2
7
- data.tar.gz: c33dab51ff1cc665842b15e2abd95011a3dfc9b774a71459b3aa88560a6805bc799ceb915e11a103eca56da0f4524d166f8a37f1588bd410d4fb71ec3e990a12
6
+ metadata.gz: be0a4bb10bd7f3e4a2706051ade9eee586b54fc808ef5c0e930ab239611ae7f21058a0fd108e4f027be5743d31296c046247ae540c9b1550802d36296b35316d
7
+ data.tar.gz: 1a40070ec8fcbe916e69945f983e17c35c472409a9dea3a7b8d090490de087d4466a1ab26b4f41aa96b87f295d6aa41031e57fb6b13e1048ca8a837a5691505e
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ require 'lib/mxx_ru/version'
10
10
  spec = Gem::Specification.new do |s|
11
11
  s.name = "Mxx_ru"
12
12
  s.version = MXX_RU_VERSION
13
- s.licenses = ['NewBSD']
13
+ s.licenses = ['BSD-3-Clause']
14
14
  s.author = "The Mxx_ru Project"
15
15
  s.email = "eao197@yahoo.com"
16
16
  s.homepage = "http://sourceforge.net/projects/mxxru"
@@ -20,7 +20,7 @@ spec = Gem::Specification.new do |s|
20
20
  "to C/C++ projects"
21
21
  s.files = FileList[ "{bin,tests,lib,docs,examples}/**/*" ].
22
22
  exclude( "rdoc" ).to_a + [ "THANKS" ]
23
- s.executables = 'mxxrugen'
23
+ s.executables = [ 'mxxrugen', 'mxxruexternals' ]
24
24
  s.require_path = "lib"
25
25
  s.has_rdoc = true
26
26
  s.rdoc_options = [ '--main', 'README' ]
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/env ruby
2
+ ##--
3
+ # Copyright (c) 1996-2004, Yauheni Akhotnikau
4
+ # Copyright (c) 2004-2006, JSC Intervale
5
+ # Copyright (c) 2006-2016, The Mxx_ru Project
6
+ # All rights reserved.
7
+ #
8
+ # Redistribution and use in source and binary forms, with or without modification,
9
+ # are permitted provided that the following conditions are met:
10
+ #
11
+ # 1. Redistributions of source code must retain the above copyright notice,
12
+ # this list of conditions and the following disclaimer.
13
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
14
+ # this list of conditions and the following disclaimer in the documentation
15
+ # and/or other materials provided with the distribution.
16
+ # 3. The name of the author may not be used to endorse or promote products derived
17
+ # from this software without specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
20
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
21
+ # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
22
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ #++
29
+ # This code is based on the code from RuCodeGen
30
+ # (http://www.rubyforge.org/projects/rucodegen) project.
31
+ # RuCodeGen is distributed under the following license:
32
+ #--
33
+ #
34
+ # Copyright (c) 2005-2006, Yauheni Akhotnikau
35
+ # All rights reserved.
36
+ #
37
+ # Redistribution and use in source and binary forms, with or without modification,
38
+ # are permitted provided that the following conditions are met:
39
+ #
40
+ # 1. Redistributions of source code must retain the above copyright notice,
41
+ # this list of conditions and the following disclaimer.
42
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
43
+ # this list of conditions and the following disclaimer in the documentation
44
+ # and/or other materials provided with the distribution.
45
+ # 3. The name of the author may not be used to endorse or promote products derived
46
+ # from this software without specific prior written permission.
47
+ #
48
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
49
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
50
+ # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
51
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
52
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
53
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
54
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
55
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
56
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57
+ #
58
+ #++
59
+
60
+
61
+ # Since v.1.6.10
62
+ #
63
+ # Template generation scripts runner.
64
+
65
+ require 'optparse'
66
+ require 'ostruct'
67
+
68
+ require 'tempfile'
69
+
70
+ require 'fileutils'
71
+
72
+ module MxxRuExternals
73
+
74
+ module Impl
75
+
76
+ # Command-line argument parsing.
77
+ #
78
+ # Returns object with the following methods:
79
+ # externals_file:: Name of file with externals definition. Could be nil.
80
+ # task:: Name of task for rake (default :install).
81
+ #
82
+ # Finishes script work is --help specified.
83
+ #
84
+ def Impl.parse_args
85
+ result = OpenStruct.new(
86
+ :externals_file => nil,
87
+ :libdirs => [],
88
+ :task => :install )
89
+
90
+ parser = OptionParser.new
91
+
92
+ parser.banner = <<BANNER
93
+ Mxx_ru Externals command script
94
+
95
+ Usage:
96
+
97
+ mxxruexternals [<options>] [-f externals-file] [task]
98
+
99
+ BANNER
100
+
101
+ parser.on_head( '-I', '--libdir LIBDIR',
102
+ 'Include LIBDIR in the search path for required modules' ) do |p|
103
+ result.libdirs << p
104
+ end
105
+
106
+ parser.on_head( '-f', '--rakefile NAME',
107
+ 'Name of file with externals definition' ) do |p|
108
+ result.externals_file = p
109
+ end
110
+
111
+ parser.on_head( '-h', '--help', 'Show this message' ) do
112
+ puts parser
113
+ exit( 1 )
114
+ end
115
+
116
+ parser.order!( ARGV ) do |nonarg|
117
+ # First non-option is a task name.
118
+ result.task = nonarg
119
+ end
120
+
121
+ result
122
+ end
123
+
124
+ end # Impl
125
+
126
+ # Performs main work.
127
+ def MxxRuExternals.run
128
+ options = Impl.parse_args
129
+
130
+ if options.externals_file.nil?
131
+ options.externals_file = 'externals.rb'
132
+ end
133
+
134
+ script_name = nil
135
+ Tempfile.open('mxxruexternals-temp', '.') do |tmpf|
136
+ script_name = tmpf.path
137
+ puts "[Info] Generation of auxilary rakefile: #{script_name}"
138
+ tmpf.write <<EOF
139
+ require 'mxx_ru/externals'
140
+
141
+ task :mxxru_cleanup_previous
142
+ task :mxxru_install_final_step
143
+
144
+ MxxRu::Externals::Registry.instance.turn_new_rules_on
145
+ load '#{options.externals_file}'
146
+
147
+ PREVIOUS_FILE = File.join MxxRu::Externals::EXTERNALS_STORAGE_DIR, 'previous.rb'
148
+ BAK_FILE_NAME = lambda {|n| "\#{PREVIOUS_FILE}.\#{n}.bak" }
149
+ MV_IF_EXISTS = lambda{ |from, to| mv(from, to) if File.exists?(from) }
150
+
151
+ file PREVIOUS_FILE do
152
+ cp '#{options.externals_file}', PREVIOUS_FILE, :verbose => Rake.verbose
153
+ end
154
+
155
+ if File.exists?(PREVIOUS_FILE)
156
+ prev_digest = Digest::MD5.file(PREVIOUS_FILE)
157
+ curr_digest = Digest::MD5.file('#{options.externals_file}')
158
+
159
+ if prev_digest != curr_digest
160
+ puts "[Note] Externals description changed from the last time"
161
+ puts "[Note] Contents of \#{PREVIOUS_FILE} will be used"
162
+
163
+ task :mxxru_cleanup_previous do
164
+ MV_IF_EXISTS[BAK_FILE_NAME[4], BAK_FILE_NAME[5]]
165
+ MV_IF_EXISTS[BAK_FILE_NAME[3], BAK_FILE_NAME[4]]
166
+ MV_IF_EXISTS[BAK_FILE_NAME[2], BAK_FILE_NAME[3]]
167
+ MV_IF_EXISTS[BAK_FILE_NAME[1], BAK_FILE_NAME[2]]
168
+ mv(PREVIOUS_FILE, BAK_FILE_NAME[1])
169
+ end
170
+
171
+ MxxRu::Externals::Registry.instance.turn_old_rules_on
172
+ load PREVIOUS_FILE
173
+
174
+ task mxxru_install_final_step: [PREVIOUS_FILE]
175
+ else
176
+ puts "[Note] It seems there is no changes in externals description"
177
+ puts "[Note] Contents of \#{PREVIOUS_FILE} won't be used"
178
+ end
179
+ else
180
+ task mxxru_install_final_step: [PREVIOUS_FILE]
181
+ end
182
+
183
+ task install: [:mxxru_cleanup_previous, :mxxru_install_final_step]
184
+ task remove: [:mxxru_cleanup_previous, :mxxru_install_final_step]
185
+ task reget: [:mxxru_cleanup_previous, :mxxru_install_final_step]
186
+
187
+ EOF
188
+ end
189
+
190
+ cmdline = "rake ";
191
+ options.libdirs.each do |l| cmdline += "-I \"#{l}\" " end
192
+ cmdline += "-f #{script_name} #{options.task}"
193
+
194
+ puts "[Info] Launching rake with: #{cmdline}"
195
+ system cmdline
196
+
197
+ end
198
+
199
+ end # MxxRuExternals
200
+
201
+ MxxRuExternals.run
202
+
203
+ # vim:ft=ruby:ts=2:sts=2:sw=2:expandtab
204
+
data/bin/mxxrugen CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env ruby
1
2
  #--
2
3
  # Copyright (c) 1996-2004, Yauheni Akhotnikau
3
4
  # Copyright (c) 2004-2006, JSC Intervale
@@ -6,10 +6,67 @@ require 'singleton'
6
6
 
7
7
  require 'digest'
8
8
 
9
+ require 'json'
10
+
9
11
  module MxxRu
10
12
 
11
13
  module Externals
12
14
 
15
+ EXTERNALS_STORAGE_DIR = '.externals'
16
+
17
+ class Registry
18
+ include Singleton
19
+
20
+ INITIAL_MODE = 0
21
+ NEW_RULES_MODE = 1
22
+ OLD_RULES_MODE = 2
23
+
24
+ def initialize
25
+ @mode = INITIAL_MODE
26
+ @externals = {}
27
+ end
28
+
29
+ def turn_new_rules_on
30
+ @mode = NEW_RULES_MODE
31
+ end
32
+
33
+ def turn_old_rules_on
34
+ @mode = OLD_RULES_MODE
35
+ end
36
+
37
+ def Registry.handle_external(*args)
38
+ Registry.instance.handle_external(*args)
39
+ end
40
+
41
+ def handle_external(name, obj)
42
+ if INITIAL_MODE == @mode
43
+ raise "Use mxxruexternals command for handling externals.\n" +
44
+ "For example:\n\n" +
45
+ "mxxruexternals -f my_externals.rb\n"
46
+ elsif NEW_RULES_MODE == @mode
47
+ @externals[ name ] = obj.make_hash
48
+ obj.define_rules :new_rules
49
+ elsif OLD_RULES_MODE == @mode
50
+ fresh_version = @externals.fetch(name, nil)
51
+ if fresh_version
52
+ puts "[Note] #{name} previous rules found"
53
+ old_hash = obj.make_hash
54
+ if old_hash == fresh_version
55
+ puts "[Note] #{name} previous rules the same with current"
56
+ else
57
+ puts "[Note] #{name} previous rules differs with current"
58
+ puts "[Note] #{name} WILL BE REGET"
59
+ obj.define_rules :old_rules
60
+ end
61
+ else
62
+ puts "[Note] #{name} not present in the current version"
63
+ puts "[Note] #{name} WILL BE REMOVED"
64
+ obj.define_rules :old_rules
65
+ end
66
+ end
67
+ end
68
+ end
69
+
13
70
  module Impl
14
71
 
15
72
  module Utils
@@ -43,6 +100,10 @@ private
43
100
  @options = [] unless @options
44
101
  @options
45
102
  end
103
+
104
+ def options_to_map
105
+ { options: @options }
106
+ end
46
107
  end # module OptionsHolder
47
108
 
48
109
  class CurlDownloder
@@ -162,7 +223,6 @@ private
162
223
  end # class WebDownloader
163
224
 
164
225
  module ExternalBasics
165
- EXTERNALS_STORAGE_DIR = '.externals'
166
226
 
167
227
  attr_reader :url
168
228
 
@@ -182,7 +242,12 @@ module ExternalBasics
182
242
  @paths.merge!(value)
183
243
  end
184
244
 
185
- alias :map :map_dir
245
+ def map(value)
246
+ STDERR.print("#{caller(1)[0]}: 'map_dir' must be used instead of 'map'," +
247
+ " 'map' is deprecated\n")
248
+
249
+ map_dir(value)
250
+ end
186
251
 
187
252
  def map_file(value)
188
253
  raise "map_file() value must be a Hash" unless value.is_a?(Hash)
@@ -194,13 +259,18 @@ private
194
259
 
195
260
  def defaults(name)
196
261
  @name = name
197
- @remove_task_name = "#{@name}:remove"
198
- @reget_task_name = "#{@name}:reget"
262
+ @install_task_name = "#{@name}_#{object_id}"
263
+ @remove_task_name = "#{@install_task_name}:remove"
264
+ @reget_task_name = "#{@install_task_name}:reget"
199
265
  @paths = {}
200
266
  @files = {}
201
267
  @verbose = Rake.verbose
202
268
  end
203
269
 
270
+ def basics_to_map
271
+ { url: @url, paths: @paths, files: @files }
272
+ end
273
+
204
274
  def fileop_options
205
275
  { :verbose => @verbose }
206
276
  end
@@ -238,17 +308,25 @@ private
238
308
  "#{prefixes.join('.')}.#{Process.pid}.#{Thread.current.object_id}"
239
309
  end
240
310
 
241
- def define(&exporter)
311
+ # Note: argument old_or_new can receive values :new_rules or :old_rules.
312
+ def define(old_or_new, &exporter)
242
313
  ensure_basics_correctness(@name)
243
314
 
244
315
  ext_prj_sources_dir, dir_subtargets, file_subtargets =
245
- define_basic_task(&exporter)
316
+ define_basic_task(old_or_new, &exporter)
246
317
 
247
- define_remove_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
248
- define_reget_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
318
+ define_remove_task(
319
+ old_or_new,
320
+ ext_prj_sources_dir,
321
+ dir_subtargets,
322
+ file_subtargets)
323
+
324
+ if :new_rules == old_or_new
325
+ define_reget_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
326
+ end
249
327
  end
250
328
 
251
- def define_basic_task(&exporter)
329
+ def define_basic_task(old_or_new, &exporter)
252
330
  ext_prj_sources_dir = subdir_name(@name.to_s)
253
331
 
254
332
  directory EXTERNALS_STORAGE_DIR
@@ -257,11 +335,14 @@ private
257
335
  @paths.each do |src, dst|
258
336
  src, actual_dst, dir_dep = handle_dir_map_pair(src, dst)
259
337
 
260
- directory dir_dep
338
+ define_only_if_new_rules(old_or_new) do
339
+ directory dir_dep
261
340
 
262
- directory actual_dst => [ext_prj_sources_dir, dir_dep] do
263
- cp_r(File.join(ext_prj_sources_dir, src), actual_dst, fileop_options)
341
+ directory actual_dst => [ext_prj_sources_dir, dir_dep] do
342
+ cp_r(File.join(ext_prj_sources_dir, src), actual_dst, fileop_options)
343
+ end
264
344
  end
345
+
265
346
  dir_subtargets << actual_dst
266
347
  end
267
348
 
@@ -269,47 +350,56 @@ private
269
350
  @files.each do |src, dst|
270
351
  dst, dir_dep = handle_file_map_pair(src, dst)
271
352
 
272
- directory dir_dep
353
+ define_only_if_new_rules(old_or_new) do
354
+ directory dir_dep
273
355
 
274
- file dst => [ext_prj_sources_dir, dir_dep] do
275
- cp(File.join(ext_prj_sources_dir, src), dst, fileop_options)
356
+ file dst => [ext_prj_sources_dir, dir_dep] do
357
+ cp(File.join(ext_prj_sources_dir, src), dst, fileop_options)
358
+ end
276
359
  end
360
+
277
361
  file_subtargets << dst
278
362
  end
279
363
 
280
- directory ext_prj_sources_dir => [EXTERNALS_STORAGE_DIR] do
281
- # All old destinations must be removed because source code
282
- # will be exported again.
283
- rm_directories(dir_subtargets)
284
- rm_files(file_subtargets)
364
+ define_only_if_new_rules(old_or_new) do
365
+ directory ext_prj_sources_dir => [EXTERNALS_STORAGE_DIR] do
366
+ # All old destinations must be removed because source code
367
+ # will be exported again.
368
+ rm_directories(dir_subtargets)
369
+ rm_files(file_subtargets)
285
370
 
286
- ext_prj_sources_tmp_dir = subdir_name(make_tmp_name(@name))
287
- exporter.call(ext_prj_sources_tmp_dir)
288
- mv(ext_prj_sources_tmp_dir, ext_prj_sources_dir, fileop_options)
289
- end
371
+ ext_prj_sources_tmp_dir = subdir_name(make_tmp_name(@name))
372
+ exporter.call(ext_prj_sources_tmp_dir)
373
+ mv(ext_prj_sources_tmp_dir, ext_prj_sources_dir, fileop_options)
374
+ end
290
375
 
291
- desc "Get #{@name} external project"
292
- task @name => [dir_subtargets, file_subtargets].flatten!
376
+ task @install_task_name =>
377
+ [:mxxru_cleanup_previous, dir_subtargets, file_subtargets].flatten!
293
378
 
294
- task default: @name
379
+ task install: @install_task_name
380
+ end
295
381
 
296
382
  return ext_prj_sources_dir, dir_subtargets, file_subtargets
297
383
  end
298
384
 
299
- def define_remove_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
300
- desc "Remove #{@name} external project"
385
+ def define_remove_task(
386
+ old_or_new, ext_prj_sources_dir, dir_subtargets, file_subtargets)
387
+
301
388
  task @remove_task_name do
302
389
  rm_files(file_subtargets)
303
390
  rm_directories(dir_subtargets)
304
391
  rm_dir_if_exists(ext_prj_sources_dir)
305
392
  end
306
393
 
307
- task :remove => @remove_task_name
394
+ if :new_rules == old_or_new
395
+ task :remove => @remove_task_name
396
+ else
397
+ task :mxxru_cleanup_previous => @remove_task_name
398
+ end
308
399
  end
309
400
 
310
401
  def define_reget_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
311
- desc "Remove and get fresh #{@name} external project"
312
- task @reget_task_name => [@remove_task_name, @name]
402
+ task @reget_task_name => [@remove_task_name, @install_task_name]
313
403
 
314
404
  task :reget => @reget_task_name
315
405
  end
@@ -347,6 +437,13 @@ private
347
437
  end
348
438
  [dst, dst_parts.first]
349
439
  end
440
+
441
+ # Helper function for doing some actions only if old_or_new is :new_rules.
442
+ def define_only_if_new_rules(old_or_new, &block)
443
+ if :new_rules == old_or_new
444
+ block.call
445
+ end
446
+ end
350
447
  end
351
448
 
352
449
  end # module Impl
@@ -361,7 +458,24 @@ class Svn < Rake::TaskLib
361
458
 
362
459
  yield self if block_given?
363
460
 
364
- define do |tmp_dir|
461
+ Registry::handle_external(@name, self)
462
+ end
463
+
464
+ attr_reader :rev
465
+ def rev(v); @rev = v; end
466
+ alias :rev= :rev
467
+
468
+ def with_externals
469
+ @with_externals = true
470
+ end
471
+
472
+ def make_hash
473
+ options_to_map.merge!( basics_to_map ).merge!(
474
+ { :rev => @rev, :with_externals => @with_externals } )
475
+ end
476
+
477
+ def define_rules(old_or_new)
478
+ define(old_or_new) do |tmp_dir|
365
479
  sh_args = [ 'svn', 'export' ]
366
480
 
367
481
  sh_args << '-r' << @rev.to_s if @rev
@@ -374,13 +488,6 @@ class Svn < Rake::TaskLib
374
488
  end
375
489
  end
376
490
 
377
- attr_reader :rev
378
- def rev(v); @rev = v; end
379
- alias :rev= :rev
380
-
381
- def with_externals
382
- @with_externals = true
383
- end
384
491
  end
385
492
 
386
493
  class Git < Rake::TaskLib
@@ -396,7 +503,36 @@ class Git < Rake::TaskLib
396
503
 
397
504
  raise "#{name}: tag and commit cannot be specified together" if @tag and @commit
398
505
 
399
- define do |tmp_dir|
506
+ Registry::handle_external(@name, self)
507
+ end
508
+
509
+ attr_reader :tag
510
+ def tag(v); @tag = v; end
511
+ alias :tag= :tag
512
+
513
+ def unlimited_depth
514
+ @unlimited_depth = true
515
+ end
516
+
517
+ def recursive
518
+ @recursive = true
519
+ end
520
+
521
+ attr_reader :commit
522
+ def commit(v); @commit = v; end
523
+ alias :commit= :commit
524
+
525
+ def make_hash
526
+ options_to_map.merge!( basics_to_map ).merge!(
527
+ { :recursive => @recursive,
528
+ :unlimited_depth => @unlimited_depth,
529
+ :tag => @tag,
530
+ :commit => @commit
531
+ } )
532
+ end
533
+
534
+ def define_rules(old_or_new)
535
+ define(old_or_new) do |tmp_dir|
400
536
  if @commit.nil?
401
537
  # No specific commit.
402
538
  # Simple clone (probably with --depth 1) is enough.
@@ -425,21 +561,6 @@ class Git < Rake::TaskLib
425
561
  end
426
562
  end
427
563
 
428
- attr_reader :tag
429
- def tag(v); @tag = v; end
430
- alias :tag= :tag
431
-
432
- def unlimited_depth
433
- @unlimited_depth = true
434
- end
435
-
436
- def recursive
437
- @recursive = true
438
- end
439
-
440
- attr_reader :commit
441
- def commit(v); @commit = v; end
442
- alias :commit= :commit
443
564
  end
444
565
 
445
566
  class Hg < Rake::TaskLib
@@ -451,7 +572,19 @@ class Hg < Rake::TaskLib
451
572
 
452
573
  yield self if block_given?
453
574
 
454
- define do |tmp_dir|
575
+ Registry::handle_external(@name, self)
576
+ end
577
+
578
+ attr_reader :tag
579
+ def tag(v); @tag = v; end
580
+ alias :tag= :tag
581
+
582
+ def make_hash
583
+ options_to_map.merge!( basics_to_map ).merge!( { :tag => @tag } )
584
+ end
585
+
586
+ def define_rules(old_or_new)
587
+ define(old_or_new) do |tmp_dir|
455
588
  sh_args = ['hg', 'clone']
456
589
 
457
590
  sh_args << '--updaterev' << @tag.to_s if @tag
@@ -463,9 +596,6 @@ class Hg < Rake::TaskLib
463
596
  end
464
597
  end
465
598
 
466
- attr_reader :tag
467
- def tag(v); @tag = v; end
468
- alias :tag= :tag
469
599
  end # class Hg
470
600
 
471
601
  # Implementation of externals represented as downloadable
@@ -477,13 +607,13 @@ class ArchiveAsExternals < Rake::TaskLib
477
607
 
478
608
  @@archive_handlers = {
479
609
  :tar => proc {
480
- ['tar', 'x'].push(*@unpaker_options).push('-f').push(archive_name)
610
+ ['tar', 'x'].push(*@unpacker_options).push('-f').push(archive_name)
481
611
  },
482
612
  :zip => proc {
483
- ['unzip'].push(*@unpaker_options).push(archive_name)
613
+ ['unzip'].push(*@unpacker_options).push(archive_name)
484
614
  },
485
615
  :sevenzip => proc {
486
- ['7z', 'x'].push(*@unpaker_options).push(archive_name)
616
+ ['7z', 'x'].push(*@unpacker_options).push(archive_name)
487
617
  }
488
618
  }
489
619
 
@@ -508,29 +638,14 @@ class ArchiveAsExternals < Rake::TaskLib
508
638
 
509
639
  def initialize(name)
510
640
  defaults(name)
511
- @unpaker_options = []
641
+ @unpacker_options = []
512
642
 
513
643
  yield self if block_given?
514
644
 
515
645
  parse_uri
516
646
  detect_archive_type
517
647
 
518
- define do |tmp_dir|
519
- # Temporary directory must be removed in a case of any error.
520
- successful = false
521
- begin
522
- mkdir(tmp_dir, fileop_options) if !Dir.exists?(tmp_dir)
523
-
524
- cd tmp_dir do
525
- download_archive
526
- unpack_archive
527
- end
528
-
529
- successful = true
530
- ensure
531
- rm_dir_if_exists(tmp_dir) unless successful
532
- end
533
- end
648
+ Registry::handle_external(@name, self)
534
649
  end
535
650
 
536
651
  def md5(v)
@@ -550,7 +665,36 @@ class ArchiveAsExternals < Rake::TaskLib
550
665
  end
551
666
 
552
667
  def unpacker_option(v)
553
- @unpaker_options.push(v)
668
+ @unpacker_options.push(v)
669
+ end
670
+
671
+ def make_hash
672
+ all_downloader_options.merge( basics_to_map ).merge!(
673
+ { :md5 => @md5,
674
+ :sha1 => @sha1,
675
+ :sha256 => @sha256,
676
+ :sha512 => @sha512,
677
+ :unpacker_options => @unpacker_options
678
+ } )
679
+ end
680
+
681
+ def define_rules(old_or_new)
682
+ define(old_or_new) do |tmp_dir|
683
+ # Temporary directory must be removed in a case of any error.
684
+ successful = false
685
+ begin
686
+ mkdir(tmp_dir, fileop_options) if !Dir.exists?(tmp_dir)
687
+
688
+ cd tmp_dir do
689
+ download_archive
690
+ unpack_archive
691
+ end
692
+
693
+ successful = true
694
+ ensure
695
+ rm_dir_if_exists(tmp_dir) unless successful
696
+ end
697
+ end
554
698
  end
555
699
 
556
700
  private
@@ -669,7 +813,7 @@ end # module MxxRu
669
813
 
670
814
  desc "Remove all external projects"
671
815
  task :remove do
672
- d = MxxRu::Externals::Impl::ExternalBasics::EXTERNALS_STORAGE_DIR
816
+ d = MxxRu::Externals::EXTERNALS_STORAGE_DIR
673
817
  rm_r(d, :verbose => Rake.verbose) if Dir.exists?(d)
674
818
  end
675
819
 
@@ -34,4 +34,4 @@
34
34
  #
35
35
  # puts 'Mxx_ru version is: ' + MXX_RU_VERSION
36
36
  #
37
- MXX_RU_VERSION = '1.6.9'
37
+ MXX_RU_VERSION = '1.6.10.1'
@@ -3,5 +3,5 @@ require 'mxx_ru/externals'
3
3
  MxxRu::git_externals :asio do |ext|
4
4
  ext.url 'https://github.com/chriskohlhoff/asio.git'
5
5
  ext.tag 'asio-1-11-0'
6
- ext.map 'asio' => 'dev'
6
+ ext.map_dir 'asio' => 'dev'
7
7
  end
@@ -3,7 +3,7 @@ require 'mxx_ru/externals'
3
3
  MxxRu::hg_externals :eigen do |ext|
4
4
  ext.url = 'https://bitbucket.org/eigen/eigen'
5
5
  ext.tag = '3.2.5'
6
- ext.map 'Eigen' => 'dev'
6
+ ext.map_dir 'Eigen' => 'dev'
7
7
  ext.map_file 'INSTALL' => 'INSTALL.eigen'
8
8
  end
9
9
 
@@ -3,8 +3,8 @@ require 'mxx_ru/externals'
3
3
  MxxRu::svn_externals :so_5 do |ext|
4
4
  ext.url 'http://svn.code.sf.net/p/sobjectizer/repo/branches/so_5/5.5'
5
5
  ext.option '-q'
6
- ext.map 'dev/so_5' => 'dev'
7
- ext.map 'dev/test/so_5' => 'dev/test'
6
+ ext.map_dir 'dev/so_5' => 'dev'
7
+ ext.map_dir 'dev/test/so_5' => 'dev/test'
8
8
  ext.map_file 'README' => 'README.so_5'
9
9
  end
10
10
 
@@ -12,6 +12,6 @@ MxxRu::svn_externals :socomm do |ext|
12
12
  ext.url 'http://svn.code.sf.net/p/sobjectizer/repo/branches/so_comm_1/1.1'
13
13
  ext.option '-q'
14
14
  ext.rev 2290
15
- ext.map 'dev/so_comm_1' => 'dev'
16
- ext.map 'dev/test/so_comm_1' => 'dev/test'
15
+ ext.map_dir 'dev/so_comm_1' => 'dev'
16
+ ext.map_dir 'dev/test/so_comm_1' => 'dev/test'
17
17
  end
@@ -4,7 +4,7 @@ MxxRu::arch_externals :asio_tgz do |e|
4
4
  e.url 'https://github.com/chriskohlhoff/asio/archive/asio-1-11-0.tar.gz'
5
5
  e.sha1 '1be2489015a1e1c7b8666a5a803d984cdec4a12b'
6
6
 
7
- e.map 'asio/src' => 'dev/asio_tgz'
7
+ e.map_dir 'asio/src' => 'dev/asio_tgz'
8
8
 
9
9
  e.downloader_option :wget, '--no-use-server-timestamps'
10
10
  e.downloader_option :wget, '-T', '36'
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Mxx_ru
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.9
4
+ version: 1.6.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Mxx_ru Project
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-31 00:00:00.000000000 Z
11
+ date: 2016-04-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Mxx_ru is a cross-platform build tool primarily focused to C/C++ projects
14
14
  email: eao197@yahoo.com
15
15
  executables:
16
16
  - mxxrugen
17
+ - mxxruexternals
17
18
  extensions: []
18
19
  extra_rdoc_files:
19
20
  - README
@@ -26,6 +27,7 @@ files:
26
27
  - README
27
28
  - Rakefile
28
29
  - THANKS
30
+ - bin/mxxruexternals
29
31
  - bin/mxxrugen
30
32
  - examples/exe_and_lib/main.cpp
31
33
  - examples/exe_and_lib/prj.rb
@@ -350,7 +352,7 @@ files:
350
352
  - tests/unix/lib_order/tc_normal_build.rb
351
353
  homepage: http://sourceforge.net/projects/mxxru
352
354
  licenses:
353
- - NewBSD
355
+ - BSD-3-Clause
354
356
  metadata: {}
355
357
  post_install_message:
356
358
  rdoc_options:
@@ -370,7 +372,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
370
372
  version: '0'
371
373
  requirements: []
372
374
  rubyforge_project:
373
- rubygems_version: 2.4.5
375
+ rubygems_version: 2.2.2
374
376
  signing_key:
375
377
  specification_version: 4
376
378
  summary: Mxx_ru (Make++ on Ruby) is a cross-platform build tool