Mxx_ru 1.6.7.1 → 1.6.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -0
- data/lib/mxx_ru/externals.rb +395 -33
- data/lib/mxx_ru/version.rb +1 -1
- data/tests/externals/check_tar.rb +13 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73efa525294417a45416e080580599b7ddc46c74
|
4
|
+
data.tar.gz: e76fb9f6de5eeff271e0a6596fa8059cfcf45ac0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd8d76c2e95b1feabb5905c9fea9b022c0260426d01c603a98bedd662831dbbc91ad64930361196378b63729e8d754f55b638ae098afd108a094bf3e96248a44
|
7
|
+
data.tar.gz: 443864dbe6a9927c2fda510dcd5aac15e67354f226ad1add2cf42cf290a02ac1739aebd8ef7c4f7a8dc52b24d289c6bab269d279acfecfba62f9b241b8901b55
|
data/Rakefile
CHANGED
@@ -10,11 +10,14 @@ 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
14
|
s.author = "The Mxx_ru Project"
|
14
15
|
s.email = "eao197@yahoo.com"
|
15
16
|
s.homepage = "http://sourceforge.net/projects/mxxru"
|
16
17
|
s.platform = Gem::Platform::RUBY
|
17
18
|
s.summary = "Mxx_ru (Make++ on Ruby) is a cross-platform build tool"
|
19
|
+
s.description = "Mxx_ru is a cross-platform build tool primarily focused " +
|
20
|
+
"to C/C++ projects"
|
18
21
|
s.files = FileList[ "{bin,tests,lib,docs,examples}/**/*" ].
|
19
22
|
exclude( "rdoc" ).to_a + [ "THANKS" ]
|
20
23
|
s.executables = 'mxxrugen'
|
data/lib/mxx_ru/externals.rb
CHANGED
@@ -1,10 +1,166 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/tasklib'
|
3
3
|
|
4
|
+
require 'uri'
|
5
|
+
require 'singleton'
|
6
|
+
|
7
|
+
require 'digest'
|
8
|
+
|
4
9
|
module MxxRu
|
5
10
|
|
6
11
|
module Externals
|
7
12
|
|
13
|
+
module Impl
|
14
|
+
|
15
|
+
module Utils
|
16
|
+
# Return nil if tool not found.
|
17
|
+
# Return version if tool is found.
|
18
|
+
def Utils.external_tool_version_probe(cmd_line, version_re)
|
19
|
+
ver = nil
|
20
|
+
IO.popen(cmd_line, :err => [:child, :out]).grep(version_re) do |s|
|
21
|
+
ver = version_re.match(s)[1]
|
22
|
+
end
|
23
|
+
ver
|
24
|
+
rescue
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
end # module Utils
|
28
|
+
|
29
|
+
module OptionsHolder
|
30
|
+
def option(*values)
|
31
|
+
make_options.push(*values)
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def push_options_to(receiver)
|
37
|
+
receiver.push(*@options)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def make_options
|
43
|
+
@options = [] unless @options
|
44
|
+
@options
|
45
|
+
end
|
46
|
+
end # module OptionsHolder
|
47
|
+
|
48
|
+
class CurlDownloder
|
49
|
+
include OptionsHolder
|
50
|
+
|
51
|
+
def CurlDownloder.check_presence
|
52
|
+
Utils.external_tool_version_probe('curl --version', /^curl\s(\S+)\s/)
|
53
|
+
end
|
54
|
+
|
55
|
+
def CurlDownloder.downloader_id
|
56
|
+
:curl
|
57
|
+
end
|
58
|
+
|
59
|
+
def initialize(options)
|
60
|
+
@options = options
|
61
|
+
end
|
62
|
+
|
63
|
+
def make_download_sh_args(uri, result_name)
|
64
|
+
push_options_to(['curl', '-L']).push('-o', result_name, uri)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class WgetDownloder
|
69
|
+
include OptionsHolder
|
70
|
+
|
71
|
+
def WgetDownloder.check_presence
|
72
|
+
Utils.external_tool_version_probe('wget --version', /^GNU Wget\s(\S+)\s/)
|
73
|
+
end
|
74
|
+
|
75
|
+
def WgetDownloder.downloader_id
|
76
|
+
:wget
|
77
|
+
end
|
78
|
+
|
79
|
+
def initialize(options)
|
80
|
+
@options = options
|
81
|
+
end
|
82
|
+
|
83
|
+
def make_download_sh_args(uri, result_name)
|
84
|
+
push_options_to(['wget']).push('-O', result_name, uri)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
module WebDownloaderOptions
|
89
|
+
def downloader_option(downloader_id, *values)
|
90
|
+
downloader_option_storage()[downloader_id].push(*values)
|
91
|
+
end
|
92
|
+
|
93
|
+
def downloader_options_for(downloader_id)
|
94
|
+
downloader_option_storage()[downloader_id]
|
95
|
+
end
|
96
|
+
|
97
|
+
def all_downloader_options
|
98
|
+
downloader_option_storage
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
def downloader_option_storage
|
103
|
+
@downloader_options = Hash.new{|h,k| h[k] = []} unless @downloader_options
|
104
|
+
@downloader_options
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class WebDownloader
|
109
|
+
include Singleton
|
110
|
+
SUPPORTED_DOWNLOADERS = [WgetDownloder, CurlDownloder]
|
111
|
+
|
112
|
+
@@preffered_downloaders = []
|
113
|
+
@@downloader_options = Hash.new{|h,k| h[k] = []}
|
114
|
+
|
115
|
+
def initialize
|
116
|
+
@downloader_type, @downloader_version = *detect_downloader_type
|
117
|
+
|
118
|
+
if Rake.verbose
|
119
|
+
puts "#{@downloader_type.downloader_id} v.#{@downloader_version} found"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def make_downloader(options_holder)
|
124
|
+
id = @downloader_type.downloader_id
|
125
|
+
@downloader_type.new(
|
126
|
+
merge_options(
|
127
|
+
options_holder.downloader_options_for(id),
|
128
|
+
@@downloader_options[id]))
|
129
|
+
end
|
130
|
+
|
131
|
+
def WebDownloader.preffered_downloader(downloader_id)
|
132
|
+
found = SUPPORTED_DOWNLOADERS.find do |klass|
|
133
|
+
downloader_id == klass.downloader_id ? klass : nil
|
134
|
+
end
|
135
|
+
raise "Unsupported downloader: #{downloader_id}" unless found
|
136
|
+
|
137
|
+
@@preffered_downloaders.push(found)
|
138
|
+
end
|
139
|
+
|
140
|
+
def WebDownloader.downloader_option(downloader_id, *values)
|
141
|
+
@@downloader_options[downloader_id].push(*values)
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
def detect_downloader_type
|
146
|
+
r = search_downloader_in(@@preffered_downloaders)
|
147
|
+
r = search_downloader_in(SUPPORTED_DOWNLOADERS) unless r
|
148
|
+
raise "No web downloader found (curl, wget)" unless r
|
149
|
+
r
|
150
|
+
end
|
151
|
+
|
152
|
+
def search_downloader_in(sequence)
|
153
|
+
version = nil
|
154
|
+
downloader = sequence.find {|klass| version = klass.check_presence}
|
155
|
+
downloader ? [downloader, version] : nil
|
156
|
+
end
|
157
|
+
|
158
|
+
def merge_options(head, tail)
|
159
|
+
r = head.dup
|
160
|
+
r.push(*tail)
|
161
|
+
end
|
162
|
+
end # class WebDownloader
|
163
|
+
|
8
164
|
module ExternalBasics
|
9
165
|
EXTERNALS_STORAGE_DIR = '.externals'
|
10
166
|
|
@@ -29,15 +185,11 @@ module ExternalBasics
|
|
29
185
|
alias :map :map_dir
|
30
186
|
|
31
187
|
def map_file(value)
|
32
|
-
raise "
|
188
|
+
raise "map_file() value must be a Hash" unless value.is_a?(Hash)
|
33
189
|
|
34
190
|
@files.merge!(value)
|
35
191
|
end
|
36
192
|
|
37
|
-
def option(*values)
|
38
|
-
@options.push(*values)
|
39
|
-
end
|
40
|
-
|
41
193
|
private
|
42
194
|
|
43
195
|
def defaults(name)
|
@@ -46,7 +198,6 @@ private
|
|
46
198
|
@reget_task_name = "#{@name}:reget"
|
47
199
|
@paths = {}
|
48
200
|
@files = {}
|
49
|
-
@options = []
|
50
201
|
@verbose = Rake.verbose
|
51
202
|
end
|
52
203
|
|
@@ -87,20 +238,17 @@ private
|
|
87
238
|
"#{prefixes.join('.')}.#{Process.pid}.#{Thread.current.object_id}"
|
88
239
|
end
|
89
240
|
|
90
|
-
def
|
91
|
-
receiver.push(*@options)
|
92
|
-
end
|
93
|
-
|
94
|
-
def define(src_type, &exporter)
|
241
|
+
def define(&exporter)
|
95
242
|
ensure_basics_correctness(@name)
|
96
243
|
|
97
|
-
ext_prj_sources_dir, dir_subtargets, file_subtargets =
|
244
|
+
ext_prj_sources_dir, dir_subtargets, file_subtargets =
|
245
|
+
define_basic_task(&exporter)
|
98
246
|
|
99
247
|
define_remove_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
|
100
248
|
define_reget_task(ext_prj_sources_dir, dir_subtargets, file_subtargets)
|
101
249
|
end
|
102
250
|
|
103
|
-
def define_basic_task(
|
251
|
+
def define_basic_task(&exporter)
|
104
252
|
ext_prj_sources_dir = subdir_name(@name.to_s)
|
105
253
|
|
106
254
|
directory EXTERNALS_STORAGE_DIR
|
@@ -135,7 +283,7 @@ private
|
|
135
283
|
rm_directories(dir_subtargets)
|
136
284
|
rm_files(file_subtargets)
|
137
285
|
|
138
|
-
ext_prj_sources_tmp_dir = subdir_name(make_tmp_name
|
286
|
+
ext_prj_sources_tmp_dir = subdir_name(make_tmp_name(@name))
|
139
287
|
exporter.call(ext_prj_sources_tmp_dir)
|
140
288
|
mv(ext_prj_sources_tmp_dir, ext_prj_sources_dir, fileop_options)
|
141
289
|
end
|
@@ -167,8 +315,11 @@ private
|
|
167
315
|
end
|
168
316
|
end
|
169
317
|
|
318
|
+
end # module Impl
|
319
|
+
|
170
320
|
class Svn < Rake::TaskLib
|
171
|
-
include ExternalBasics
|
321
|
+
include Impl::ExternalBasics
|
322
|
+
include Impl::OptionsHolder
|
172
323
|
|
173
324
|
def initialize(name)
|
174
325
|
defaults(name)
|
@@ -176,12 +327,12 @@ class Svn < Rake::TaskLib
|
|
176
327
|
|
177
328
|
yield self if block_given?
|
178
329
|
|
179
|
-
define
|
330
|
+
define do |tmp_dir|
|
180
331
|
sh_args = [ 'svn', 'export' ]
|
181
332
|
|
182
333
|
sh_args << '-r' << @rev.to_s if @rev
|
183
334
|
sh_args << '--ignore-externals' unless @with_externals
|
184
|
-
|
335
|
+
push_options_to(sh_args)
|
185
336
|
|
186
337
|
sh_args << @url << tmp_dir
|
187
338
|
|
@@ -199,7 +350,8 @@ class Svn < Rake::TaskLib
|
|
199
350
|
end
|
200
351
|
|
201
352
|
class Git < Rake::TaskLib
|
202
|
-
include ExternalBasics
|
353
|
+
include Impl::ExternalBasics
|
354
|
+
include Impl::OptionsHolder
|
203
355
|
|
204
356
|
def initialize(name)
|
205
357
|
defaults(name)
|
@@ -208,17 +360,34 @@ class Git < Rake::TaskLib
|
|
208
360
|
|
209
361
|
yield self if block_given?
|
210
362
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
363
|
+
raise "#{name}: tag and commit cannot be specified together" if @tag and @commit
|
364
|
+
|
365
|
+
define do |tmp_dir|
|
366
|
+
if @commit.nil?
|
367
|
+
# No specific commit.
|
368
|
+
# Simple clone (probably with --depth 1) is enough.
|
369
|
+
sh_args = ['git', 'clone']
|
370
|
+
|
371
|
+
sh_args << '--branch' << @tag.to_s if @tag
|
372
|
+
sh_args << '--depth' << '1' unless @unlimited_depth
|
373
|
+
sh_args << '--recursive' if @recursive
|
374
|
+
push_options_to(sh_args)
|
375
|
+
|
376
|
+
sh_args << @url << tmp_dir
|
377
|
+
|
378
|
+
sh *sh_args
|
379
|
+
else
|
380
|
+
# To extract specific commit is necessary to do
|
381
|
+
# at least two commands: clone (without limitiation of depth) and
|
382
|
+
# checkout for specific commit.
|
383
|
+
|
384
|
+
# Do `clone repo tmp_dir`
|
385
|
+
sh *(push_options_to(['git', 'clone']).push(@url).push(tmp_dir))
|
386
|
+
# Do `checkout commit` inside tmp_dir
|
387
|
+
cd tmp_dir do
|
388
|
+
sh 'git', 'checkout', @commit
|
389
|
+
end
|
390
|
+
end
|
222
391
|
end
|
223
392
|
end
|
224
393
|
|
@@ -233,21 +402,26 @@ class Git < Rake::TaskLib
|
|
233
402
|
def recursive
|
234
403
|
@recursive = true
|
235
404
|
end
|
405
|
+
|
406
|
+
attr_reader :commit
|
407
|
+
def commit(v); @commit = v; end
|
408
|
+
alias :commit= :commit
|
236
409
|
end
|
237
410
|
|
238
411
|
class Hg < Rake::TaskLib
|
239
|
-
include ExternalBasics
|
412
|
+
include Impl::ExternalBasics
|
413
|
+
include Impl::OptionsHolder
|
240
414
|
|
241
415
|
def initialize(name)
|
242
416
|
defaults(name)
|
243
417
|
|
244
418
|
yield self if block_given?
|
245
419
|
|
246
|
-
define
|
420
|
+
define do |tmp_dir|
|
247
421
|
sh_args = ['hg', 'clone']
|
248
422
|
|
249
423
|
sh_args << '--updaterev' << @tag.to_s if @tag
|
250
|
-
|
424
|
+
push_options_to(sh_args)
|
251
425
|
|
252
426
|
sh_args << @url << tmp_dir
|
253
427
|
|
@@ -258,6 +432,185 @@ class Hg < Rake::TaskLib
|
|
258
432
|
attr_reader :tag
|
259
433
|
def tag(v); @tag = v; end
|
260
434
|
alias :tag= :tag
|
435
|
+
end # class Hg
|
436
|
+
|
437
|
+
# Implementation of externals represented as downloadable
|
438
|
+
# archive (like tar.gz, zip, rar or 7z).
|
439
|
+
#
|
440
|
+
class ArchiveAsExternals < Rake::TaskLib
|
441
|
+
include Impl::ExternalBasics
|
442
|
+
include Impl::WebDownloaderOptions
|
443
|
+
|
444
|
+
@@archive_handlers = {
|
445
|
+
:tar => proc {
|
446
|
+
['tar', 'x'].push(*@unpaker_options).push('-f').push(archive_name)
|
447
|
+
},
|
448
|
+
:zip => proc {
|
449
|
+
['unzip'].push(*@unpaker_options).push(archive_name)
|
450
|
+
},
|
451
|
+
:sevenzip => proc {
|
452
|
+
['7z', 'x'].push(*@unpaker_options).push(archive_name)
|
453
|
+
}
|
454
|
+
}
|
455
|
+
|
456
|
+
@@archive_extensions = {
|
457
|
+
'.tar' => :tar,
|
458
|
+
'.tar.gz' => :tar,
|
459
|
+
'.tgz' => :tar,
|
460
|
+
'.taz' => :tar,
|
461
|
+
'.tar.Z' => :tar,
|
462
|
+
'.taZ' => :tar,
|
463
|
+
'.tar.bz2' => :tar,
|
464
|
+
'.tz2' => :tar,
|
465
|
+
'.tbz2' => :tar,
|
466
|
+
'.tar.lz' => :tar,
|
467
|
+
'.tar.lzma' => :tar,
|
468
|
+
'.tlz' => :tar,
|
469
|
+
'.tar.lzo' => :tar,
|
470
|
+
'.tar.xz' => :tar,
|
471
|
+
'.zip' => :zip,
|
472
|
+
'.7z' => :sevenzip
|
473
|
+
}
|
474
|
+
|
475
|
+
def initialize(name)
|
476
|
+
defaults(name)
|
477
|
+
@unpaker_options = []
|
478
|
+
|
479
|
+
yield self if block_given?
|
480
|
+
|
481
|
+
parse_uri
|
482
|
+
detect_archive_type
|
483
|
+
|
484
|
+
define do |tmp_dir|
|
485
|
+
# Temporary directory must be removed in a case of any error.
|
486
|
+
successful = false
|
487
|
+
begin
|
488
|
+
mkdir(tmp_dir, fileop_options) if !Dir.exists?(tmp_dir)
|
489
|
+
|
490
|
+
cd tmp_dir do
|
491
|
+
download_archive
|
492
|
+
unpack_archive
|
493
|
+
end
|
494
|
+
|
495
|
+
successful = true
|
496
|
+
ensure
|
497
|
+
rm_dir_if_exists(tmp_dir) unless successful
|
498
|
+
end
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
def md5(v)
|
503
|
+
@md5 = v
|
504
|
+
end
|
505
|
+
|
506
|
+
def sha1(v)
|
507
|
+
@sha1 = v
|
508
|
+
end
|
509
|
+
|
510
|
+
def sha256(v)
|
511
|
+
@sha256 = v
|
512
|
+
end
|
513
|
+
|
514
|
+
def sha512(v)
|
515
|
+
@sha512 = v
|
516
|
+
end
|
517
|
+
|
518
|
+
def unpacker_option(v)
|
519
|
+
@unpaker_options.push(v)
|
520
|
+
end
|
521
|
+
|
522
|
+
private
|
523
|
+
def parse_uri
|
524
|
+
@parsed_uri = URI::split(@url)
|
525
|
+
@archive_name = File.split(uri_path).last
|
526
|
+
end
|
527
|
+
|
528
|
+
def uri_scheme
|
529
|
+
@parsed_uri[0]
|
530
|
+
end
|
531
|
+
|
532
|
+
def uri_path
|
533
|
+
@parsed_uri[5] # See doc for URI::split for description
|
534
|
+
# of items in result vector.
|
535
|
+
end
|
536
|
+
|
537
|
+
attr_reader :archive_name
|
538
|
+
|
539
|
+
def detect_archive_type
|
540
|
+
ext = @@archive_extensions.keys.find {|k| @archive_name.end_with?(k)}
|
541
|
+
raise "#{name} unable to detect archive type for " +
|
542
|
+
"#{@archive_name}" unless ext
|
543
|
+
|
544
|
+
@archive_type = @@archive_extensions[ext]
|
545
|
+
end
|
546
|
+
|
547
|
+
def download_archive
|
548
|
+
if 'file' == uri_scheme
|
549
|
+
download_archive_via_cp
|
550
|
+
else
|
551
|
+
download_archive_from_web
|
552
|
+
end
|
553
|
+
check_digest_if_necessary(:MD5, @md5)
|
554
|
+
check_digest_if_necessary(:SHA1, @sha1)
|
555
|
+
check_digest_if_necessary(:SHA256, @sha256)
|
556
|
+
check_digest_if_necessary(:SHA512, @sha512)
|
557
|
+
end
|
558
|
+
|
559
|
+
def download_archive_from_web
|
560
|
+
web_downloader = Impl::WebDownloader.instance.make_downloader(self)
|
561
|
+
sh *(web_downloader.make_download_sh_args(@url, archive_name))
|
562
|
+
end
|
563
|
+
|
564
|
+
def download_archive_via_cp
|
565
|
+
# On Windows path can look like '/d:/...'.
|
566
|
+
# The leading slash must be removed.
|
567
|
+
path = uri_path.gsub(/^(\/)(\w:)(.+)$/, '\2\3')
|
568
|
+
cp(path, archive_name, fileop_options)
|
569
|
+
end
|
570
|
+
|
571
|
+
def unpack_archive
|
572
|
+
sh(*make_unpacker_args)
|
573
|
+
rm(archive_name, fileop_options)
|
574
|
+
names = Dir['*']
|
575
|
+
if 1 == names.size and Dir.exists?(names.first)
|
576
|
+
# This is the only folder in the distributive.
|
577
|
+
# Move all its contents one level up.
|
578
|
+
cd names.first do
|
579
|
+
# Files like '.gitignore' won't be found without FNM_DOTMATCH.
|
580
|
+
# But in that case '.' and '..' will be found too.
|
581
|
+
Dir.glob('*', File::FNM_DOTMATCH).each do |n|
|
582
|
+
mv(n, '..', fileop_options) if n != '.' && n != '..'
|
583
|
+
end
|
584
|
+
end
|
585
|
+
# This single directory no more needed.
|
586
|
+
rm_r(names.first, fileop_options)
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
def check_digest_if_necessary(digest_id, expected)
|
591
|
+
return unless expected
|
592
|
+
|
593
|
+
digest_klass = Digest(digest_id)
|
594
|
+
puts "#{archive_name} checking #{digest_id} checksum..." if @verbose
|
595
|
+
chsum = digest_klass.file(archive_name).hexdigest
|
596
|
+
if chsum != expected
|
597
|
+
raise "#{archive_name}: #{digest_id} checksum missmatch. " +
|
598
|
+
"actual: #{chsum}, expected: #{expected}"
|
599
|
+
end
|
600
|
+
end
|
601
|
+
|
602
|
+
def make_unpacker_args
|
603
|
+
handler = @@archive_handlers[@archive_type]
|
604
|
+
self.instance_eval &handler
|
605
|
+
end
|
606
|
+
end # class ArchiveAsExternals
|
607
|
+
|
608
|
+
def Externals::preffered_downloader(downloader_id)
|
609
|
+
Impl::WebDownloader.preffered_downloader(downloader_id)
|
610
|
+
end
|
611
|
+
|
612
|
+
def Externals::downloader_option(downloader_id, *values)
|
613
|
+
Impl::WebDownloader.downloader_option(downloader_id, *values)
|
261
614
|
end
|
262
615
|
|
263
616
|
end # module Externals
|
@@ -274,16 +627,25 @@ def MxxRu.hg_externals(name, &block)
|
|
274
627
|
Externals::Hg.new(name, &block)
|
275
628
|
end
|
276
629
|
|
630
|
+
def MxxRu.arch_externals(name, &block)
|
631
|
+
Externals::ArchiveAsExternals.new(name, &block)
|
632
|
+
end
|
633
|
+
|
277
634
|
end # module MxxRu
|
278
635
|
|
279
636
|
desc "Remove all external projects"
|
280
637
|
task :remove do
|
281
|
-
d = MxxRu::Externals::ExternalBasics::EXTERNALS_STORAGE_DIR
|
638
|
+
d = MxxRu::Externals::Impl::ExternalBasics::EXTERNALS_STORAGE_DIR
|
282
639
|
rm_r(d, :verbose => Rake.verbose) if Dir.exists?(d)
|
283
640
|
end
|
284
641
|
|
285
642
|
desc "Remove and get again all external projects"
|
286
643
|
task :reget
|
287
644
|
|
645
|
+
local_rc_file = File.join(Dir.getwd, '.externalsrc')
|
646
|
+
if File.exists?(local_rc_file)
|
647
|
+
load local_rc_file
|
648
|
+
end
|
649
|
+
|
288
650
|
# vim:ts=2:sts=2:sw=2:expandtab
|
289
651
|
|
data/lib/mxx_ru/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'mxx_ru/externals'
|
2
|
+
|
3
|
+
MxxRu::arch_externals :asio_tgz do |e|
|
4
|
+
e.url 'https://github.com/chriskohlhoff/asio/archive/asio-1-11-0.tar.gz'
|
5
|
+
e.sha1 '1be2489015a1e1c7b8666a5a803d984cdec4a12b'
|
6
|
+
|
7
|
+
e.map 'asio/src' => 'dev/asio_tgz'
|
8
|
+
|
9
|
+
e.downloader_option :wget, '--no-use-server-timestamps'
|
10
|
+
e.downloader_option :wget, '-T', '36'
|
11
|
+
|
12
|
+
e.downloader_option :curl, '--max-time', '3600'
|
13
|
+
end
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Mxx_ru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.8
|
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-
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
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
|
@@ -217,6 +217,7 @@ files:
|
|
217
217
|
- tests/externals/check_git.rb
|
218
218
|
- tests/externals/check_hg.rb
|
219
219
|
- tests/externals/check_svn.rb
|
220
|
+
- tests/externals/check_tar.rb
|
220
221
|
- tests/mxx_ru/binary_library/tc_binary_library.rb
|
221
222
|
- tests/mxx_ru/binary_library/tc_binary_target_lib_methods.rb
|
222
223
|
- tests/mxx_ru/change_default_value/ignoring_by_build_root/build.rb
|
@@ -348,7 +349,8 @@ files:
|
|
348
349
|
- tests/unix/lib_order/main.rb
|
349
350
|
- tests/unix/lib_order/tc_normal_build.rb
|
350
351
|
homepage: http://sourceforge.net/projects/mxxru
|
351
|
-
licenses:
|
352
|
+
licenses:
|
353
|
+
- NewBSD
|
352
354
|
metadata: {}
|
353
355
|
post_install_message:
|
354
356
|
rdoc_options:
|