Mxx_ru 1.4.4 → 1.4.5
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.
- data/Rakefile +3 -3
- data/THANKS +1 -0
- data/lib/mxx_ru/cpp/toolsets/vc8.rb +3 -405
- data/lib/mxx_ru/cpp/toolsets/vc8_family.rb +452 -0
- data/lib/mxx_ru/cpp/toolsets/vc9.rb +58 -0
- data/lib/mxx_ru/version.rb +1 -1
- data/tests/cpp/lib_from_lib_dependecies/b.cpp +6 -6
- data/tests/cpp/lib_from_lib_dependecies/checker.cpp +10 -10
- metadata +4 -3
- data/tests/cpp/lib_from_lib_dependecies/o/main.obj +0 -0
data/Rakefile
CHANGED
@@ -31,10 +31,10 @@ end
|
|
31
31
|
test = Rake::TestTask.new do |t|
|
32
32
|
test_files = FileList[ 'tests/**/{tc,ts}*.rb' ]
|
33
33
|
|
34
|
-
# Visual C++ 8.0 specific files must be excluded when working with
|
34
|
+
# Visual C++ 8.0-9.0 specific files must be excluded when working with
|
35
35
|
# another compiler.
|
36
|
-
test_files = test_files.delete_if { |n| /\/
|
37
|
-
/(mxx_ru\/cpp\/toolsets\/){0,1}
|
36
|
+
test_files = test_files.delete_if { |n| /\/vc[89]/ =~ n } unless
|
37
|
+
/(mxx_ru\/cpp\/toolsets\/){0,1}vc[89]/ =~ ENV[ 'MXX_RU_CPP_TOOLSET' ]
|
38
38
|
|
39
39
|
# Visual C++ specific files must be excluded when working with
|
40
40
|
# another compiler.
|
data/THANKS
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#--
|
2
2
|
# Copyright (c) 1996-2004, Yauheni Akhotnikau
|
3
3
|
# Copyright (c) 2004-2006, JSC Intervale
|
4
|
-
# Copyright (c) 2006, The Mxx_ru Project
|
4
|
+
# Copyright (c) 2006-2008, The Mxx_ru Project
|
5
5
|
# All rights reserved.
|
6
6
|
#
|
7
7
|
# Redistribution and use in source and binary forms, with or without modification,
|
@@ -30,32 +30,10 @@ require 'ostruct'
|
|
30
30
|
require 'set'
|
31
31
|
|
32
32
|
require 'mxx_ru/cpp/target'
|
33
|
-
require 'mxx_ru/cpp/toolsets/
|
33
|
+
require 'mxx_ru/cpp/toolsets/vc8_family'
|
34
34
|
|
35
35
|
module MxxRu
|
36
36
|
module Cpp
|
37
|
-
|
38
|
-
# Expand class Target to store source and actual manifest descriptions.
|
39
|
-
class Target < MxxRu::BinaryTarget
|
40
|
-
# Get source manifest description. If target has no manifest
|
41
|
-
# then default manifest will be returned.
|
42
|
-
def vc8_source_manifest
|
43
|
-
if nil != @vc8_source_manifest
|
44
|
-
@vc8_source_manifest
|
45
|
-
else
|
46
|
-
MxxRu::Cpp::Toolsets::Vc8::default_manifest
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Setter for source manifest description.
|
51
|
-
def vc8_source_manifest=( manifest )
|
52
|
-
@vc8_source_manifest = manifest
|
53
|
-
end
|
54
|
-
|
55
|
-
attr_accessor :vc8_actual_manifest
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
37
|
module Toolsets
|
60
38
|
|
61
39
|
# Toolset implementation for Visual C++ 2005 (8.0)
|
@@ -63,397 +41,17 @@ module MxxRu
|
|
63
41
|
# Setups following tags:
|
64
42
|
# [_ver_hi_] high version number. Value: 8.
|
65
43
|
# [_ver_lo_] low version number. Value: 0.
|
66
|
-
class Vc8 < MxxRu::Cpp::Toolsets::
|
67
|
-
|
68
|
-
# Tag name for a custom manifest tool name.
|
69
|
-
#
|
70
|
-
# Since v.1.4.0
|
71
|
-
MT_NAME_TAG = 'mt_name'
|
72
|
-
|
73
|
-
# Actual manifest description.
|
74
|
-
class ActualManifest
|
75
|
-
attr_reader :manifest_file
|
76
|
-
attr_reader :digital_resource_id
|
77
|
-
|
78
|
-
def initialize(
|
79
|
-
source_manifest,
|
80
|
-
manifest_file,
|
81
|
-
digital_resource_id )
|
82
|
-
@source_manifest = source_manifest
|
83
|
-
@manifest_file = manifest_file
|
84
|
-
@digital_resource_id = digital_resource_id
|
85
|
-
end
|
86
|
-
|
87
|
-
# Is autogeneration of manifest must be used?
|
88
|
-
def autogen?
|
89
|
-
@source_manifest.autogen
|
90
|
-
end
|
91
|
-
|
92
|
-
# Is manifest tool (mt.exe) must be used?
|
93
|
-
def mt?
|
94
|
-
@source_manifest.mt
|
95
|
-
end
|
96
|
-
|
97
|
-
# Is autogenerated manifest file should be kept after
|
98
|
-
# embeding into executable?
|
99
|
-
# By default autogenerated manifest file will be deleted.
|
100
|
-
def keep_manifest_file?
|
101
|
-
( mt? and autogen? ) ? @source_manifest.keep_manifest_file : true
|
102
|
-
end
|
103
|
-
end # class ActualManifest
|
104
|
-
|
105
|
-
# For compatibility with previous versions.
|
106
|
-
Actual_manifest = ActualManifest
|
107
|
-
|
108
|
-
@@default_manifest = OpenStruct.new(
|
109
|
-
:autogen => true,
|
110
|
-
:mt => true,
|
111
|
-
:manifest_file => :default,
|
112
|
-
:resource_id => :default,
|
113
|
-
:keep_manifest_file => false )
|
114
|
-
|
115
|
-
# Set of avaliable values for :resource_id key-value pair
|
116
|
-
# in manifest description.
|
117
|
-
@@resource_id_names = Set.new( [
|
118
|
-
:default,
|
119
|
-
:process_manifest,
|
120
|
-
:isolationaware_manifest,
|
121
|
-
:isolationaware_nostaticimport_manifest ] )
|
122
|
-
|
123
|
-
public
|
44
|
+
class Vc8 < MxxRu::Cpp::Toolsets::Vc8Family
|
124
45
|
def initialize( a_name = "vc" )
|
125
46
|
super( a_name )
|
126
47
|
|
127
48
|
setup_tag( "ver_hi", "8" )
|
128
49
|
setup_tag( "ver_lo", "0" )
|
129
50
|
end
|
130
|
-
|
131
|
-
# Check some VC8.0 constraints before calling superclass
|
132
|
-
# implementation
|
133
|
-
#
|
134
|
-
# VC8.0 does not support Single-Thread Run-Time.
|
135
|
-
def setup_mandatory_options( target )
|
136
|
-
if THREADING_SINGLE == target.mxx_threading_mode
|
137
|
-
raise MxxRu::UnsupportedModeEx.new(
|
138
|
-
"Visual C++ 2005 not supports " +
|
139
|
-
"single-threaded static RTL" )
|
140
|
-
elsif THREADING_DEFAULT == target.mxx_threading_mode
|
141
|
-
# Because VC8.0 not support Single Thread Run-Time then
|
142
|
-
# by default we must use Mutli-Threading Run-Time.
|
143
|
-
target.threading_mode( THREADING_MULTI )
|
144
|
-
end
|
145
|
-
|
146
|
-
super( target )
|
147
|
-
|
148
|
-
setup_manifest( target )
|
149
|
-
setup_manifest_params( target )
|
150
|
-
end
|
151
|
-
|
152
|
-
# Remove autogenerated manifest file if any.
|
153
|
-
def clean_dll_specific_files( dll_file, dll_info, target )
|
154
|
-
super( dll_file, dll_info, target )
|
155
|
-
clean_autogenerated_manifest( target )
|
156
|
-
end
|
157
|
-
|
158
|
-
# Remove autogenerated manifest file if any.
|
159
|
-
def clean_exe_specific_files( exe_file, exe_info, target )
|
160
|
-
super( exe_file, exe_info, target )
|
161
|
-
clean_autogenerated_manifest( target )
|
162
|
-
end
|
163
|
-
|
164
|
-
# Append command line for embeding manifest file to result
|
165
|
-
# of super class implementation.
|
166
|
-
def make_dll_command_lines(
|
167
|
-
dll_name,
|
168
|
-
dll_info,
|
169
|
-
linker_lists,
|
170
|
-
target )
|
171
|
-
|
172
|
-
append_mt_command_lines(
|
173
|
-
super( dll_name, dll_info, linker_lists, target ),
|
174
|
-
dll_name,
|
175
|
-
target )
|
176
|
-
end
|
177
|
-
|
178
|
-
# Append command line for embeding manifest file to result
|
179
|
-
# of super class implementation.
|
180
|
-
def make_exe_command_lines(
|
181
|
-
exe_name,
|
182
|
-
exe_info,
|
183
|
-
linker_lists,
|
184
|
-
target )
|
185
|
-
append_mt_command_lines(
|
186
|
-
super( exe_name, exe_info, linker_lists, target ),
|
187
|
-
exe_name,
|
188
|
-
target )
|
189
|
-
end
|
190
|
-
|
191
|
-
# Make manifest description.
|
192
|
-
#
|
193
|
-
# Examples:
|
194
|
-
# # Autogenerate manifest for target. Do not embed into executable.
|
195
|
-
# # Manifest stored in <target>.manifest file.
|
196
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
197
|
-
# :target => self,
|
198
|
-
# :autogen => :to_default_file )
|
199
|
-
#
|
200
|
-
# # Autogenerate manifest for target. Embed into executable.
|
201
|
-
# # Autogenerated manifest will be deleted after embeding.
|
202
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
203
|
-
# :target => self,
|
204
|
-
# :autogen => :to_default_file,
|
205
|
-
# :mt => {} )
|
206
|
-
#
|
207
|
-
# # Autogenerate manifest for target. Embed into executable.
|
208
|
-
# # Autogenerated manifest will be kept after embeding.
|
209
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
210
|
-
# :target => self,
|
211
|
-
# :autogen => :to_default_file,
|
212
|
-
# :mt => { :keep_manifest_file => true } )
|
213
|
-
#
|
214
|
-
# # Autogenerate manifest for target. Embed into executable as
|
215
|
-
# # resource with id CREATEPROCESS_MANIFEST_RESOURCE_ID id.
|
216
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
217
|
-
# :target => self,
|
218
|
-
# :autogen => :to_default_file,
|
219
|
-
# :mt => { :resource_id => :process_manifest } )
|
220
|
-
#
|
221
|
-
# # Autogenerate manifest for target. Store manifest into
|
222
|
-
# # file 'hello_world.exe.manifest'. Embed info executable.
|
223
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
224
|
-
# :target => self,
|
225
|
-
# :autogen => 'hello_world.exe.manifest',
|
226
|
-
# :mt => {} )
|
227
|
-
#
|
228
|
-
# # Embed manifest from file 'hello_world.exe.manifest' into
|
229
|
-
# # target executable.
|
230
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
231
|
-
# :target => self,
|
232
|
-
# :mt => { :manifest => 'hello_world.exe.manifest' } )
|
233
|
-
# # Embed manifest from file 'hello_world.dll.manifest' into
|
234
|
-
# # target executable as resource with
|
235
|
-
# # ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID id.
|
236
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
237
|
-
# :target => self,
|
238
|
-
# :mt => { :manifest => 'hello_world.exe.manifest',
|
239
|
-
# :resource_id => :isolationaware_nonstaticimport } )
|
240
|
-
#
|
241
|
-
# # Autogenerate manifest for all targets in build. Store manifest
|
242
|
-
# # in default files. Do not embed manifest into executable.
|
243
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
244
|
-
# :autogen => :to_default_file )
|
245
|
-
#
|
246
|
-
# # Autogenerate manifest for all targets in build. Store manifest
|
247
|
-
# # in default files. Embed manifest into executable.
|
248
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
249
|
-
# :autogen => :to_default_file,
|
250
|
-
# :mt => {} )
|
251
|
-
#
|
252
|
-
# # Drop default manifest for build. Only explicitly specified
|
253
|
-
# # manifest will be generated.
|
254
|
-
# MxxRu::Cpp::Toolsets::Vc8::manifest( nil )
|
255
|
-
#
|
256
|
-
def self.manifest( params )
|
257
|
-
if nil == params
|
258
|
-
# No default manifest.
|
259
|
-
@@default_manifest = nil
|
260
|
-
else
|
261
|
-
check_manifest_params( params )
|
262
|
-
|
263
|
-
d = OpenStruct.new( :keep_manifest_file => true )
|
264
|
-
|
265
|
-
if params.key?( :autogen )
|
266
|
-
d.autogen = true
|
267
|
-
d.manifest_file = ( params[ :autogen ] == :to_default_file ?
|
268
|
-
:default : params[ :autogen ] )
|
269
|
-
d.keep_manifest_file = false
|
270
|
-
else
|
271
|
-
d.autogen = false
|
272
|
-
end
|
273
|
-
|
274
|
-
if params.key?( :mt ) && nil != params[ :mt ]
|
275
|
-
d.mt = true
|
276
|
-
mt_params = params[ :mt ]
|
277
|
-
d.manifest_file = mt_params[ :manifest ] if
|
278
|
-
mt_params.key?( :manifest )
|
279
|
-
d.resource_id = ( mt_params.key?( :resource_id ) ?
|
280
|
-
mt_params[ :resource_id ] : :default )
|
281
|
-
|
282
|
-
if mt_params.key?( :keep_manifest_file ) and
|
283
|
-
params.key?( :autogen )
|
284
|
-
d.keep_manifest_file = mt_params[ :keep_manifest_file ]
|
285
|
-
end
|
286
|
-
else
|
287
|
-
d.mt = false
|
288
|
-
end
|
289
|
-
|
290
|
-
if params.key?( :target )
|
291
|
-
# Source manifest must be set for specified target.
|
292
|
-
params[ :target ].vc8_source_manifest = d
|
293
|
-
else
|
294
|
-
# This is new default manifest.
|
295
|
-
@@default_manifest = d
|
296
|
-
end
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
# Get default manifest.
|
301
|
-
def self.default_manifest
|
302
|
-
@@default_manifest
|
303
|
-
end
|
304
|
-
|
305
|
-
protected
|
306
|
-
# Set actual manifest for target if source manifest defined
|
307
|
-
# (or default manifest exists).
|
308
|
-
def setup_manifest( target )
|
309
|
-
# Manifest can be set only for EXE or DLL.
|
310
|
-
if ExeTargetType::TYPE == target.target_type.name or
|
311
|
-
DllTargetType::TYPE == target.target_type.name
|
312
|
-
desc = target.vc8_source_manifest
|
313
|
-
|
314
|
-
if nil != desc
|
315
|
-
# Actual manifest must be created for target.
|
316
|
-
manifest_file =
|
317
|
-
if :default == desc.manifest_file
|
318
|
-
# We must create name for manifest.
|
319
|
-
if ExeTargetType::TYPE == target.target_type.name
|
320
|
-
make_exe_name(
|
321
|
-
target.mxx_target_name,
|
322
|
-
target ).full_name
|
323
|
-
else
|
324
|
-
make_dll_name(
|
325
|
-
target.mxx_target_name,
|
326
|
-
target ).full_name
|
327
|
-
end + ".manifest"
|
328
|
-
else
|
329
|
-
# Manifest filename already specified.
|
330
|
-
desc.manifest_file
|
331
|
-
end
|
332
|
-
|
333
|
-
# If mt.exe will be used then we must determine
|
334
|
-
# digital resource_id for manifest resource.
|
335
|
-
digital_resource_id =
|
336
|
-
if desc.mt
|
337
|
-
case desc.resource_id
|
338
|
-
when :default:
|
339
|
-
# Resource ID must be caclulated based on
|
340
|
-
# target type.
|
341
|
-
ExeTargetType::TYPE == target.target_type.name ? 1 : 2
|
342
|
-
when :process_manifest: 1
|
343
|
-
when :isolationaware_manifest: 2
|
344
|
-
else
|
345
|
-
# :isolationaware_nostaticimport_manifest
|
346
|
-
3
|
347
|
-
end
|
348
|
-
else
|
349
|
-
nil
|
350
|
-
end
|
351
|
-
|
352
|
-
target.vc8_actual_manifest = ActualManifest.new(
|
353
|
-
desc,
|
354
|
-
manifest_file,
|
355
|
-
digital_resource_id )
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
# Setup linker params for processing target manifest.
|
361
|
-
def setup_manifest_params( target )
|
362
|
-
m = target.vc8_actual_manifest
|
363
|
-
if nil != m and m.autogen?
|
364
|
-
# Linker must generate manifest.
|
365
|
-
target.linker_option( '/MANIFEST' )
|
366
|
-
target.linker_option( '/MANIFESTFILE:' + m.manifest_file )
|
367
|
-
else
|
368
|
-
# Linker should not generate manifest.
|
369
|
-
target.linker_option( '/MANIFEST:NO' )
|
370
|
-
end
|
371
|
-
end
|
372
|
-
|
373
|
-
# Remove autogenerated manifest file if any.
|
374
|
-
def clean_autogenerated_manifest( target )
|
375
|
-
m = target.vc8_actual_manifest
|
376
|
-
MxxRu::Util::delete_file( m.manifest_file ) if
|
377
|
-
m != nil and m.autogen?
|
378
|
-
end
|
379
|
-
|
380
|
-
# Append command line for embeding manifest file to end of
|
381
|
-
# specified command line list.
|
382
|
-
def append_mt_command_lines(
|
383
|
-
cmd_lines,
|
384
|
-
target_name,
|
385
|
-
target )
|
386
|
-
|
387
|
-
m = target.vc8_actual_manifest
|
388
|
-
if nil != m and m.mt?
|
389
|
-
cmd_lines << "#{mt_name} /nologo " +
|
390
|
-
"/outputresource:\"#{target_name};\#" +
|
391
|
-
"#{m.digital_resource_id}\" " +
|
392
|
-
"/manifest \"#{m.manifest_file}\""
|
393
|
-
|
394
|
-
if !m.keep_manifest_file?
|
395
|
-
# del utility doesn't work with unix slashes
|
396
|
-
cmd_lines << "del \"#{MxxRu::Util::native_pathname(m.manifest_file)}\""
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
cmd_lines
|
401
|
-
end
|
402
|
-
|
403
|
-
# Name of manifest tool executable
|
404
|
-
def mt_name
|
405
|
-
tag( MT_NAME_TAG, "mt" )
|
406
|
-
end
|
407
|
-
|
408
|
-
# Checking manifest params validity.
|
409
|
-
def self.check_manifest_params( params )
|
410
|
-
if nil != params
|
411
|
-
if params.key?( :mt )
|
412
|
-
mt_hash = params[ :mt ]
|
413
|
-
|
414
|
-
# :resource_id must have one of avaliable values.
|
415
|
-
if mt_hash.key?( :resource_id ) and
|
416
|
-
!@@resource_id_names.member?( mt_hash[ :resource_id ] )
|
417
|
-
raise InvalidValueEx.new(
|
418
|
-
"invalid value for :resource_id key: " +
|
419
|
-
"'#{mt_hash[:resource_id]}'" )
|
420
|
-
end
|
421
|
-
|
422
|
-
if !mt_hash.key?( :manifest ) and
|
423
|
-
!params.key?( :autogen )
|
424
|
-
|
425
|
-
raise InvalidValueEx.new(
|
426
|
-
"no manifest file name specified" )
|
427
|
-
end
|
428
|
-
|
429
|
-
# :keep_manifest_file should be Bool.
|
430
|
-
if mt_hash.key?( :keep_manifest_file ) and
|
431
|
-
true != mt_hash[ :keep_manifest_file ] and
|
432
|
-
false != mt_hash[ :keep_manifest_file ]
|
433
|
-
raise InvalidValueEx.new(
|
434
|
-
"value for :keep_manifest_file should be 'true' " +
|
435
|
-
"or 'false'" )
|
436
|
-
end
|
437
|
-
end
|
438
|
-
|
439
|
-
if params.key?( :autogen )
|
440
|
-
v = params[ :autogen ]
|
441
|
-
if !( v == :to_default_file or
|
442
|
-
v.kind_of?( String ) )
|
443
|
-
raise InvalidValueEx.new(
|
444
|
-
"invalid value for :autogen (must be " +
|
445
|
-
":to_default_file or String instance)" )
|
446
|
-
end
|
447
|
-
end
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
51
|
end # class Vc8
|
452
52
|
|
453
53
|
end # module Toolsets
|
454
|
-
|
455
54
|
end # module Cpp
|
456
|
-
|
457
55
|
end # module MxxRu
|
458
56
|
|
459
57
|
MxxRu::Cpp::setup_toolset( MxxRu::Cpp::Toolsets::Vc8.new )
|
@@ -0,0 +1,452 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 1996-2004, Yauheni Akhotnikau
|
3
|
+
# Copyright (c) 2004-2006, JSC Intervale
|
4
|
+
# Copyright (c) 2006-2008, The Mxx_ru Project
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without modification,
|
8
|
+
# are permitted provided that the following conditions are met:
|
9
|
+
#
|
10
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer.
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
14
|
+
# and/or other materials provided with the distribution.
|
15
|
+
# 3. The name of the author may not be used to endorse or promote products derived
|
16
|
+
# from this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
19
|
+
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
20
|
+
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
|
21
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
22
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
23
|
+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
26
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
#++
|
28
|
+
|
29
|
+
require 'ostruct'
|
30
|
+
require 'set'
|
31
|
+
|
32
|
+
require 'mxx_ru/cpp/target'
|
33
|
+
require 'mxx_ru/cpp/toolsets/vc_family'
|
34
|
+
|
35
|
+
module MxxRu
|
36
|
+
module Cpp
|
37
|
+
|
38
|
+
# Expand class Target to store source and actual manifest descriptions.
|
39
|
+
class Target < MxxRu::BinaryTarget
|
40
|
+
# Get source manifest description. If target has no manifest
|
41
|
+
# then default manifest will be returned.
|
42
|
+
def vc8_source_manifest
|
43
|
+
if nil != @vc8_source_manifest
|
44
|
+
@vc8_source_manifest
|
45
|
+
else
|
46
|
+
MxxRu::Cpp::Toolsets::Vc8Family::default_manifest
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Setter for source manifest description.
|
51
|
+
def vc8_source_manifest=( manifest )
|
52
|
+
@vc8_source_manifest = manifest
|
53
|
+
end
|
54
|
+
|
55
|
+
attr_accessor :vc8_actual_manifest
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
module Toolsets
|
60
|
+
|
61
|
+
# Toolset implementation for Visual C++ 2005 (8.0) and above.
|
62
|
+
#
|
63
|
+
class Vc8Family < MxxRu::Cpp::Toolsets::VcFamily
|
64
|
+
|
65
|
+
# Tag name for a custom manifest tool name.
|
66
|
+
#
|
67
|
+
# Since v.1.4.0
|
68
|
+
MT_NAME_TAG = 'mt_name'
|
69
|
+
|
70
|
+
# Actual manifest description.
|
71
|
+
class ActualManifest
|
72
|
+
attr_reader :manifest_file
|
73
|
+
attr_reader :digital_resource_id
|
74
|
+
|
75
|
+
def initialize(
|
76
|
+
source_manifest,
|
77
|
+
manifest_file,
|
78
|
+
digital_resource_id )
|
79
|
+
@source_manifest = source_manifest
|
80
|
+
@manifest_file = manifest_file
|
81
|
+
@digital_resource_id = digital_resource_id
|
82
|
+
end
|
83
|
+
|
84
|
+
# Is autogeneration of manifest must be used?
|
85
|
+
def autogen?
|
86
|
+
@source_manifest.autogen
|
87
|
+
end
|
88
|
+
|
89
|
+
# Is manifest tool (mt.exe) must be used?
|
90
|
+
def mt?
|
91
|
+
@source_manifest.mt
|
92
|
+
end
|
93
|
+
|
94
|
+
# Is autogenerated manifest file should be kept after
|
95
|
+
# embeding into executable?
|
96
|
+
# By default autogenerated manifest file will be deleted.
|
97
|
+
def keep_manifest_file?
|
98
|
+
( mt? and autogen? ) ? @source_manifest.keep_manifest_file : true
|
99
|
+
end
|
100
|
+
end # class ActualManifest
|
101
|
+
|
102
|
+
# For compatibility with previous versions.
|
103
|
+
Actual_manifest = ActualManifest
|
104
|
+
|
105
|
+
@@default_manifest = OpenStruct.new(
|
106
|
+
:autogen => true,
|
107
|
+
:mt => true,
|
108
|
+
:manifest_file => :default,
|
109
|
+
:resource_id => :default,
|
110
|
+
:keep_manifest_file => false )
|
111
|
+
|
112
|
+
# Set of avaliable values for :resource_id key-value pair
|
113
|
+
# in manifest description.
|
114
|
+
@@resource_id_names = Set.new( [
|
115
|
+
:default,
|
116
|
+
:process_manifest,
|
117
|
+
:isolationaware_manifest,
|
118
|
+
:isolationaware_nostaticimport_manifest ] )
|
119
|
+
|
120
|
+
public
|
121
|
+
def initialize( a_name = "vc" )
|
122
|
+
super( a_name )
|
123
|
+
end
|
124
|
+
|
125
|
+
# Check some VC8.0 constraints before calling superclass
|
126
|
+
# implementation
|
127
|
+
#
|
128
|
+
# VC8.0 does not support Single-Thread Run-Time.
|
129
|
+
def setup_mandatory_options( target )
|
130
|
+
if THREADING_SINGLE == target.mxx_threading_mode
|
131
|
+
raise MxxRu::UnsupportedModeEx.new(
|
132
|
+
"Visual C++ 2005 and above doesn't support " +
|
133
|
+
"single-threaded static RTL" )
|
134
|
+
elsif THREADING_DEFAULT == target.mxx_threading_mode
|
135
|
+
# Because VC8.0 doesn't support Single Thread Run-Time then
|
136
|
+
# by default we must use Mutli-Threading Run-Time.
|
137
|
+
target.threading_mode( THREADING_MULTI )
|
138
|
+
end
|
139
|
+
|
140
|
+
super( target )
|
141
|
+
|
142
|
+
setup_manifest( target )
|
143
|
+
setup_manifest_params( target )
|
144
|
+
end
|
145
|
+
|
146
|
+
# Remove autogenerated manifest file if any.
|
147
|
+
def clean_dll_specific_files( dll_file, dll_info, target )
|
148
|
+
super( dll_file, dll_info, target )
|
149
|
+
clean_autogenerated_manifest( target )
|
150
|
+
end
|
151
|
+
|
152
|
+
# Remove autogenerated manifest file if any.
|
153
|
+
def clean_exe_specific_files( exe_file, exe_info, target )
|
154
|
+
super( exe_file, exe_info, target )
|
155
|
+
clean_autogenerated_manifest( target )
|
156
|
+
end
|
157
|
+
|
158
|
+
# Append command line for embeding manifest file to result
|
159
|
+
# of super class implementation.
|
160
|
+
def make_dll_command_lines(
|
161
|
+
dll_name,
|
162
|
+
dll_info,
|
163
|
+
linker_lists,
|
164
|
+
target )
|
165
|
+
|
166
|
+
append_mt_command_lines(
|
167
|
+
super( dll_name, dll_info, linker_lists, target ),
|
168
|
+
dll_name,
|
169
|
+
target )
|
170
|
+
end
|
171
|
+
|
172
|
+
# Append command line for embeding manifest file to result
|
173
|
+
# of super class implementation.
|
174
|
+
def make_exe_command_lines(
|
175
|
+
exe_name,
|
176
|
+
exe_info,
|
177
|
+
linker_lists,
|
178
|
+
target )
|
179
|
+
append_mt_command_lines(
|
180
|
+
super( exe_name, exe_info, linker_lists, target ),
|
181
|
+
exe_name,
|
182
|
+
target )
|
183
|
+
end
|
184
|
+
|
185
|
+
# Make manifest description.
|
186
|
+
#
|
187
|
+
# Examples:
|
188
|
+
# # Autogenerate manifest for target. Do not embed into executable.
|
189
|
+
# # Manifest stored in <target>.manifest file.
|
190
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
191
|
+
# :target => self,
|
192
|
+
# :autogen => :to_default_file )
|
193
|
+
#
|
194
|
+
# # Autogenerate manifest for target. Embed into executable.
|
195
|
+
# # Autogenerated manifest will be deleted after embeding.
|
196
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
197
|
+
# :target => self,
|
198
|
+
# :autogen => :to_default_file,
|
199
|
+
# :mt => {} )
|
200
|
+
#
|
201
|
+
# # Autogenerate manifest for target. Embed into executable.
|
202
|
+
# # Autogenerated manifest will be kept after embeding.
|
203
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
204
|
+
# :target => self,
|
205
|
+
# :autogen => :to_default_file,
|
206
|
+
# :mt => { :keep_manifest_file => true } )
|
207
|
+
#
|
208
|
+
# # Autogenerate manifest for target. Embed into executable as
|
209
|
+
# # resource with id CREATEPROCESS_MANIFEST_RESOURCE_ID id.
|
210
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
211
|
+
# :target => self,
|
212
|
+
# :autogen => :to_default_file,
|
213
|
+
# :mt => { :resource_id => :process_manifest } )
|
214
|
+
#
|
215
|
+
# # Autogenerate manifest for target. Store manifest into
|
216
|
+
# # file 'hello_world.exe.manifest'. Embed info executable.
|
217
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
218
|
+
# :target => self,
|
219
|
+
# :autogen => 'hello_world.exe.manifest',
|
220
|
+
# :mt => {} )
|
221
|
+
#
|
222
|
+
# # Embed manifest from file 'hello_world.exe.manifest' into
|
223
|
+
# # target executable.
|
224
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
225
|
+
# :target => self,
|
226
|
+
# :mt => { :manifest => 'hello_world.exe.manifest' } )
|
227
|
+
# # Embed manifest from file 'hello_world.dll.manifest' into
|
228
|
+
# # target executable as resource with
|
229
|
+
# # ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID id.
|
230
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
231
|
+
# :target => self,
|
232
|
+
# :mt => { :manifest => 'hello_world.exe.manifest',
|
233
|
+
# :resource_id => :isolationaware_nonstaticimport } )
|
234
|
+
#
|
235
|
+
# # Autogenerate manifest for all targets in build. Store manifest
|
236
|
+
# # in default files. Do not embed manifest into executable.
|
237
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
238
|
+
# :autogen => :to_default_file )
|
239
|
+
#
|
240
|
+
# # Autogenerate manifest for all targets in build. Store manifest
|
241
|
+
# # in default files. Embed manifest into executable.
|
242
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest(
|
243
|
+
# :autogen => :to_default_file,
|
244
|
+
# :mt => {} )
|
245
|
+
#
|
246
|
+
# # Drop default manifest for build. Only explicitly specified
|
247
|
+
# # manifest will be generated.
|
248
|
+
# MxxRu::Cpp::Toolsets::Vc8::manifest( nil )
|
249
|
+
#
|
250
|
+
def self.manifest( params )
|
251
|
+
if nil == params
|
252
|
+
# No default manifest.
|
253
|
+
@@default_manifest = nil
|
254
|
+
else
|
255
|
+
check_manifest_params( params )
|
256
|
+
|
257
|
+
d = OpenStruct.new( :keep_manifest_file => true )
|
258
|
+
|
259
|
+
if params.key?( :autogen )
|
260
|
+
d.autogen = true
|
261
|
+
d.manifest_file = ( params[ :autogen ] == :to_default_file ?
|
262
|
+
:default : params[ :autogen ] )
|
263
|
+
d.keep_manifest_file = false
|
264
|
+
else
|
265
|
+
d.autogen = false
|
266
|
+
end
|
267
|
+
|
268
|
+
if params.key?( :mt ) && nil != params[ :mt ]
|
269
|
+
d.mt = true
|
270
|
+
mt_params = params[ :mt ]
|
271
|
+
d.manifest_file = mt_params[ :manifest ] if
|
272
|
+
mt_params.key?( :manifest )
|
273
|
+
d.resource_id = ( mt_params.key?( :resource_id ) ?
|
274
|
+
mt_params[ :resource_id ] : :default )
|
275
|
+
|
276
|
+
if mt_params.key?( :keep_manifest_file ) and
|
277
|
+
params.key?( :autogen )
|
278
|
+
d.keep_manifest_file = mt_params[ :keep_manifest_file ]
|
279
|
+
end
|
280
|
+
else
|
281
|
+
d.mt = false
|
282
|
+
end
|
283
|
+
|
284
|
+
if params.key?( :target )
|
285
|
+
# Source manifest must be set for specified target.
|
286
|
+
params[ :target ].vc8_source_manifest = d
|
287
|
+
else
|
288
|
+
# This is new default manifest.
|
289
|
+
@@default_manifest = d
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
# Get default manifest.
|
295
|
+
def self.default_manifest
|
296
|
+
@@default_manifest
|
297
|
+
end
|
298
|
+
|
299
|
+
protected
|
300
|
+
# Set actual manifest for target if source manifest defined
|
301
|
+
# (or default manifest exists).
|
302
|
+
def setup_manifest( target )
|
303
|
+
# Manifest can be set only for EXE or DLL.
|
304
|
+
if ExeTargetType::TYPE == target.target_type.name or
|
305
|
+
DllTargetType::TYPE == target.target_type.name
|
306
|
+
desc = target.vc8_source_manifest
|
307
|
+
|
308
|
+
if nil != desc
|
309
|
+
# Actual manifest must be created for target.
|
310
|
+
manifest_file =
|
311
|
+
if :default == desc.manifest_file
|
312
|
+
# We must create name for manifest.
|
313
|
+
if ExeTargetType::TYPE == target.target_type.name
|
314
|
+
make_exe_name(
|
315
|
+
target.mxx_target_name,
|
316
|
+
target ).full_name
|
317
|
+
else
|
318
|
+
make_dll_name(
|
319
|
+
target.mxx_target_name,
|
320
|
+
target ).full_name
|
321
|
+
end + ".manifest"
|
322
|
+
else
|
323
|
+
# Manifest filename already specified.
|
324
|
+
desc.manifest_file
|
325
|
+
end
|
326
|
+
|
327
|
+
# If mt.exe will be used then we must determine
|
328
|
+
# digital resource_id for manifest resource.
|
329
|
+
digital_resource_id =
|
330
|
+
if desc.mt
|
331
|
+
case desc.resource_id
|
332
|
+
when :default:
|
333
|
+
# Resource ID must be caclulated based on
|
334
|
+
# target type.
|
335
|
+
ExeTargetType::TYPE == target.target_type.name ? 1 : 2
|
336
|
+
when :process_manifest: 1
|
337
|
+
when :isolationaware_manifest: 2
|
338
|
+
else
|
339
|
+
# :isolationaware_nostaticimport_manifest
|
340
|
+
3
|
341
|
+
end
|
342
|
+
else
|
343
|
+
nil
|
344
|
+
end
|
345
|
+
|
346
|
+
target.vc8_actual_manifest = ActualManifest.new(
|
347
|
+
desc,
|
348
|
+
manifest_file,
|
349
|
+
digital_resource_id )
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
# Setup linker params for processing target manifest.
|
355
|
+
def setup_manifest_params( target )
|
356
|
+
m = target.vc8_actual_manifest
|
357
|
+
if nil != m and m.autogen?
|
358
|
+
# Linker must generate manifest.
|
359
|
+
target.linker_option( '/MANIFEST' )
|
360
|
+
target.linker_option( '/MANIFESTFILE:' + m.manifest_file )
|
361
|
+
else
|
362
|
+
# Linker should not generate manifest.
|
363
|
+
target.linker_option( '/MANIFEST:NO' )
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
# Remove autogenerated manifest file if any.
|
368
|
+
def clean_autogenerated_manifest( target )
|
369
|
+
m = target.vc8_actual_manifest
|
370
|
+
MxxRu::Util::delete_file( m.manifest_file ) if
|
371
|
+
m != nil and m.autogen?
|
372
|
+
end
|
373
|
+
|
374
|
+
# Append command line for embeding manifest file to end of
|
375
|
+
# specified command line list.
|
376
|
+
def append_mt_command_lines(
|
377
|
+
cmd_lines,
|
378
|
+
target_name,
|
379
|
+
target )
|
380
|
+
|
381
|
+
m = target.vc8_actual_manifest
|
382
|
+
if nil != m and m.mt?
|
383
|
+
cmd_lines << "#{mt_name} /nologo " +
|
384
|
+
"/outputresource:\"#{target_name};\#" +
|
385
|
+
"#{m.digital_resource_id}\" " +
|
386
|
+
"/manifest \"#{m.manifest_file}\""
|
387
|
+
|
388
|
+
if !m.keep_manifest_file?
|
389
|
+
# del utility doesn't work with unix slashes
|
390
|
+
cmd_lines << "del \"#{MxxRu::Util::native_pathname(m.manifest_file)}\""
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
cmd_lines
|
395
|
+
end
|
396
|
+
|
397
|
+
# Name of manifest tool executable
|
398
|
+
def mt_name
|
399
|
+
tag( MT_NAME_TAG, "mt" )
|
400
|
+
end
|
401
|
+
|
402
|
+
# Checking manifest params validity.
|
403
|
+
def self.check_manifest_params( params )
|
404
|
+
if nil != params
|
405
|
+
if params.key?( :mt )
|
406
|
+
mt_hash = params[ :mt ]
|
407
|
+
|
408
|
+
# :resource_id must have one of avaliable values.
|
409
|
+
if mt_hash.key?( :resource_id ) and
|
410
|
+
!@@resource_id_names.member?( mt_hash[ :resource_id ] )
|
411
|
+
raise InvalidValueEx.new(
|
412
|
+
"invalid value for :resource_id key: " +
|
413
|
+
"'#{mt_hash[:resource_id]}'" )
|
414
|
+
end
|
415
|
+
|
416
|
+
if !mt_hash.key?( :manifest ) and
|
417
|
+
!params.key?( :autogen )
|
418
|
+
|
419
|
+
raise InvalidValueEx.new(
|
420
|
+
"no manifest file name specified" )
|
421
|
+
end
|
422
|
+
|
423
|
+
# :keep_manifest_file should be Bool.
|
424
|
+
if mt_hash.key?( :keep_manifest_file ) and
|
425
|
+
true != mt_hash[ :keep_manifest_file ] and
|
426
|
+
false != mt_hash[ :keep_manifest_file ]
|
427
|
+
raise InvalidValueEx.new(
|
428
|
+
"value for :keep_manifest_file should be 'true' " +
|
429
|
+
"or 'false'" )
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
433
|
+
if params.key?( :autogen )
|
434
|
+
v = params[ :autogen ]
|
435
|
+
if !( v == :to_default_file or
|
436
|
+
v.kind_of?( String ) )
|
437
|
+
raise InvalidValueEx.new(
|
438
|
+
"invalid value for :autogen (must be " +
|
439
|
+
":to_default_file or String instance)" )
|
440
|
+
end
|
441
|
+
end
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
445
|
+
end # class Vc8Family
|
446
|
+
|
447
|
+
end # module Toolsets
|
448
|
+
|
449
|
+
end # module Cpp
|
450
|
+
|
451
|
+
end # module MxxRu
|
452
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 1996-2004, Yauheni Akhotnikau
|
3
|
+
# Copyright (c) 2004-2006, JSC Intervale
|
4
|
+
# Copyright (c) 2006-2008, The Mxx_ru Project
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without modification,
|
8
|
+
# are permitted provided that the following conditions are met:
|
9
|
+
#
|
10
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
11
|
+
# this list of conditions and the following disclaimer.
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
14
|
+
# and/or other materials provided with the distribution.
|
15
|
+
# 3. The name of the author may not be used to endorse or promote products derived
|
16
|
+
# from this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
19
|
+
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
20
|
+
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
|
21
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
22
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
23
|
+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
26
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
#++
|
28
|
+
|
29
|
+
require 'ostruct'
|
30
|
+
require 'set'
|
31
|
+
|
32
|
+
require 'mxx_ru/cpp/target'
|
33
|
+
require 'mxx_ru/cpp/toolsets/vc8_family'
|
34
|
+
|
35
|
+
module MxxRu
|
36
|
+
module Cpp
|
37
|
+
module Toolsets
|
38
|
+
|
39
|
+
# Toolset implementation for Visual C++ 9.0
|
40
|
+
#
|
41
|
+
# Setups following tags:
|
42
|
+
# [_ver_hi_] high version number. Value: 9.
|
43
|
+
# [_ver_lo_] low version number. Value: 0.
|
44
|
+
class Vc9 < MxxRu::Cpp::Toolsets::Vc8Family
|
45
|
+
def initialize( a_name = "vc" )
|
46
|
+
super( a_name )
|
47
|
+
|
48
|
+
setup_tag( "ver_hi", "9" )
|
49
|
+
setup_tag( "ver_lo", "0" )
|
50
|
+
end
|
51
|
+
end # class Vc9
|
52
|
+
|
53
|
+
end # module Toolsets
|
54
|
+
end # module Cpp
|
55
|
+
end # module MxxRu
|
56
|
+
|
57
|
+
MxxRu::Cpp::setup_toolset( MxxRu::Cpp::Toolsets::Vc9.new )
|
58
|
+
|
data/lib/mxx_ru/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#include <cstdio>
|
2
|
-
|
3
|
-
void B() {
|
4
|
-
std::printf( "B\n" );
|
5
|
-
}
|
6
|
-
|
1
|
+
#include <cstdio>
|
2
|
+
|
3
|
+
void B() {
|
4
|
+
std::printf( "B\n" );
|
5
|
+
}
|
6
|
+
|
@@ -1,10 +1,10 @@
|
|
1
|
-
void A();
|
2
|
-
void B();
|
3
|
-
|
4
|
-
int main() {
|
5
|
-
A();
|
6
|
-
B();
|
7
|
-
|
8
|
-
return 0;
|
9
|
-
}
|
10
|
-
|
1
|
+
void A();
|
2
|
+
void B();
|
3
|
+
|
4
|
+
int main() {
|
5
|
+
A();
|
6
|
+
B();
|
7
|
+
|
8
|
+
return 0;
|
9
|
+
}
|
10
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Mxx_ru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Mxx_ru Project
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-04-
|
12
|
+
date: 2008-04-14 00:00:00 +04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -86,7 +86,6 @@ files:
|
|
86
86
|
- tests/cpp/lib_from_lib_dependecies/etalon/second.txt
|
87
87
|
- tests/cpp/lib_from_lib_dependecies/first.ut.rb
|
88
88
|
- tests/cpp/lib_from_lib_dependecies/o
|
89
|
-
- tests/cpp/lib_from_lib_dependecies/o/main.obj
|
90
89
|
- tests/cpp/lib_from_lib_dependecies/out
|
91
90
|
- tests/cpp/lib_from_lib_dependecies/second.ut.rb
|
92
91
|
- tests/cpp/lib_from_lib_dependecies/tc_checker.rb
|
@@ -373,6 +372,8 @@ files:
|
|
373
372
|
- lib/mxx_ru/cpp/toolsets/gcc_unix_family.rb
|
374
373
|
- lib/mxx_ru/cpp/toolsets/vc7.rb
|
375
374
|
- lib/mxx_ru/cpp/toolsets/vc8.rb
|
375
|
+
- lib/mxx_ru/cpp/toolsets/vc8_family.rb
|
376
|
+
- lib/mxx_ru/cpp/toolsets/vc9.rb
|
376
377
|
- lib/mxx_ru/cpp/toolsets/vc_family.rb
|
377
378
|
- lib/mxx_ru/cpp.rb
|
378
379
|
- lib/mxx_ru/ex.rb
|
Binary file
|