Mxx_ru 1.4.1 → 1.4.2

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/THANKS CHANGED
@@ -1,3 +1,3 @@
1
1
  Konstantine Nazarov (rut at user dot sourceforge dot net)
2
2
  Igor Mironchick (imironchick at gmail dot com)
3
-
3
+ Mikhail Pustovalov (mpustovalov at gmail dot com)
@@ -127,10 +127,12 @@ class RuCodeGen < AbstractGenerator
127
127
  alias_method :add, :<<
128
128
 
129
129
  # Adding a name of next embeded code generation script.
130
- def add_embeded( script )
130
+ def add_embedded( script )
131
131
  @scripts << Embedded.new( @target.create_full_src_file_name( script ) )
132
132
  end
133
133
 
134
+ alias_method :add_embeded, :add_embedded
135
+
134
136
  # Perform code generation.
135
137
  def build( target )
136
138
  @scripts.each do |s|
@@ -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,
@@ -457,6 +457,11 @@ module MxxRu
457
457
  # Otherwise the value of mxx_target_root is concatenated with a given
458
458
  # target name.
459
459
  attr_reader :mxx_target_root
460
+ # Custom prefix for target.
461
+ # NIL, if custom prefix not defined.
462
+ #
463
+ # Since v.1.4.2
464
+ attr_reader :mxx_target_prefix
460
465
  # Custom extension for target.
461
466
  # NIL, if custom extension not defined.
462
467
  attr_reader :mxx_target_ext
@@ -743,10 +748,16 @@ module MxxRu
743
748
  @mxx_target_name = create_full_target_file_name( a_target )
744
749
  end
745
750
 
751
+ # Set a custom prefix for target.
752
+ def target_prefix( ext )
753
+ @mxx_target_prefix = ext
754
+ end
755
+
746
756
  # Set a custom extension for target.
747
757
  def target_ext( ext )
748
758
  @mxx_target_ext = ext
749
759
  end
760
+ alias_method :target_suffix, :target_ext
750
761
 
751
762
  # Change source files path.
752
763
  # If empty string is set, then full file names are required.
@@ -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,
@@ -267,7 +267,7 @@ module MxxRu
267
267
  # There are possible situations where non-standard tool must be run
268
268
  # instead of standard one. For example, a patched compiler that has name
269
269
  # 'gcc-patched' instead of 'gcc'. It isn't appropriate to create new
270
- # toolset for this. More easy to set thename of a custom tool in
270
+ # toolset for this. More easy to set the name of a custom tool in
271
271
  # MXX_RU_CPP_TOOLSET environment variable:
272
272
  #
273
273
  # export MXX_RU_CPP_TOOLSET=gcc_linux compiler_name=gcc-patched
@@ -788,7 +788,7 @@ module MxxRu
788
788
  #
789
789
  # AbstractMethodEx exception is thrown in a base class.
790
790
  #
791
- def lib_file_name( source_name )
791
+ def lib_file_name( source_name, target )
792
792
  raise AbstractMethodEx.new(
793
793
  "MxxRu::Cpp::Toolset::lib_file_name" )
794
794
  end
@@ -797,7 +797,7 @@ module MxxRu
797
797
  #
798
798
  # AbstractMethodEx exception is thrown in a base class.
799
799
  #
800
- def lib_link_name( source_name )
800
+ def lib_link_name( source_name, target )
801
801
  raise AbstractMethodEx.new(
802
802
  "MxxRu::Cpp::Toolset::lib_link_name" )
803
803
  end
@@ -826,7 +826,7 @@ module MxxRu
826
826
  #
827
827
  # AbstractMethodEx exception is thrown in a base class.
828
828
  #
829
- def dll_file_name( source_name )
829
+ def dll_file_name( source_name, target )
830
830
  raise AbstractMethodEx.new(
831
831
  "MxxRu::Cpp::Toolset::dll_file_name" )
832
832
  end
@@ -909,7 +909,7 @@ module MxxRu
909
909
  #
910
910
  # AbstractMethodEx exception is thrown in a base class.
911
911
  #
912
- def exe_file_name( source_name )
912
+ def exe_file_name( source_name, target )
913
913
  raise AbstractMethodEx.new(
914
914
  "MxxRu::Cpp::Toolset::exe_file_name" )
915
915
  end
@@ -1043,10 +1043,8 @@ module MxxRu
1043
1043
  source_name = File::basename( lib_name )
1044
1044
  source_path = File::dirname( lib_name )
1045
1045
 
1046
- real_name = setup_custom_target_ext(
1047
- lib_file_name( source_name ),
1048
- target )
1049
- link_name = lib_link_name( source_name )
1046
+ real_name = lib_file_name( source_name, target )
1047
+ link_name = lib_link_name( source_name, target )
1050
1048
  dest_path = target.mxx_obj_placement.get_lib(
1051
1049
  source_path, self, target )
1052
1050
 
@@ -1060,9 +1058,7 @@ module MxxRu
1060
1058
  source_name = File::basename( dll_name )
1061
1059
  source_path = File::dirname( dll_name )
1062
1060
 
1063
- dll_real_name = setup_custom_target_ext(
1064
- dll_file_name( source_name ),
1065
- target )
1061
+ dll_real_name = dll_file_name( source_name, target )
1066
1062
  dll_dest_path = target.mxx_obj_placement.get_dll(
1067
1063
  source_path, self, target )
1068
1064
 
@@ -1083,9 +1079,7 @@ module MxxRu
1083
1079
  source_name = File::basename( exe_name )
1084
1080
  source_path = File::dirname( exe_name )
1085
1081
 
1086
- real_name = setup_custom_target_ext(
1087
- exe_file_name( source_name ),
1088
- target )
1082
+ real_name = exe_file_name( source_name, target )
1089
1083
  dest_path = target.mxx_obj_placement.get_exe(
1090
1084
  source_path, self, target )
1091
1085
 
@@ -1139,14 +1133,46 @@ module MxxRu
1139
1133
  end
1140
1134
 
1141
1135
  protected
1142
- # Setup custom target extension if that extension defined.
1143
- def setup_custom_target_ext( target_file_name, target )
1144
- if target.mxx_target_ext
1145
- return Util::remove_file_ext( target_file_name ) +
1146
- target.mxx_target_ext
1147
- end
1136
+ # There isn't a prefix for target name
1137
+ #
1138
+ # Since v.1.4.2
1139
+ NO_PREFIX = nil
1140
+
1141
+ # There isn't a suffix for target name
1142
+ #
1143
+ # Since v.1.4.2
1144
+ NO_SUFFIX = nil
1148
1145
 
1149
- target_file_name
1146
+ # Helper method for creating name of target with consideration
1147
+ # of target's custom prefix and/or suffix.
1148
+ #
1149
+ # Should be used in derived classes. Example of usage:
1150
+ #
1151
+ # # For GCC family on Unix.
1152
+ # def lib_file_name( source_name, target )
1153
+ # construct_target_name( source_name, 'lib', '.a', target )
1154
+ # end
1155
+ # # For Visual C++ family on Windows.
1156
+ # def lib_file_name( source_name, target )
1157
+ # construct_target_name( source_name, NO_PREFIX, '.lib', target )
1158
+ # end
1159
+ #
1160
+ # Since v.1.4.2
1161
+ #
1162
+ def construct_target_name(
1163
+ # Base name for target name construction.
1164
+ source_name,
1165
+ # Default prefix for target. nil if there isn't such prefix.
1166
+ default_prefix,
1167
+ # Default suffix for target. nil if there isn't such suffix.
1168
+ default_suffix,
1169
+ # Target for which resulting name is being constructed.
1170
+ target )
1171
+ p = target.mxx_target_prefix
1172
+ p = ( default_prefix.nil? ? '' : default_prefix ) unless p
1173
+ s = target.mxx_target_ext
1174
+ s = ( default_suffix.nil? ? '' : default_suffix ) unless s
1175
+ p + source_name + s
1150
1176
  end
1151
1177
 
1152
1178
  end # class Toolset
@@ -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,
@@ -244,13 +244,13 @@ module MxxRu
244
244
  end
245
245
 
246
246
  # See description at MxxRu::Cpp::Toolset#lib_file_name.
247
- def lib_file_name( source_name )
248
- return source_name + ".lib"
247
+ def lib_file_name( source_name, target )
248
+ return construct_target_name( source_name, NO_PREFIX, ".lib", target )
249
249
  end
250
250
 
251
251
  # See description at MxxRu::Cpp::Toolset#lib_link_name.
252
- def lib_link_name( source_name )
253
- return lib_file_name( source_name )
252
+ def lib_link_name( source_name, target )
253
+ return lib_file_name( source_name, target )
254
254
  end
255
255
 
256
256
  # See description at MxxRu::Cpp::Toolset#make_lib_command_lines.
@@ -274,8 +274,8 @@ module MxxRu
274
274
  end
275
275
 
276
276
  # See description at MxxRu::Cpp::Toolset#dll_file_name.
277
- def dll_file_name( source_name )
278
- return source_name + ".dll"
277
+ def dll_file_name( source_name, target )
278
+ return construct_target_name( source_name, NO_PREFIX, ".dll", target )
279
279
  end
280
280
 
281
281
  # See description at MxxRu::Cpp::Toolset#implib_link_name.
@@ -285,7 +285,7 @@ module MxxRu
285
285
 
286
286
  # Import library name should be defined explicitly for Visual C++
287
287
  if nil != target.mxx_implib_path
288
- return lib_file_name( target.mxx_target_name )
288
+ return lib_file_name( target.mxx_target_name, target )
289
289
  end
290
290
 
291
291
  return nil
@@ -351,8 +351,8 @@ module MxxRu
351
351
  end
352
352
 
353
353
  # See description at MxxRu::Cpp::Toolset#exe_file_name.
354
- def exe_file_name( source_name )
355
- return source_name + ".exe"
354
+ def exe_file_name( source_name, target )
355
+ return construct_target_name( source_name, NO_PREFIX, ".exe", target )
356
356
  end
357
357
 
358
358
  # See description at MxxRu::Cpp::Toolset#make_exe_command_lines.
@@ -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,
@@ -145,12 +145,12 @@ module MxxRu
145
145
  end
146
146
 
147
147
  # See description at MxxRu::Cpp::Toolset#lib_file_name.
148
- def lib_file_name( source_name )
149
- return "lib" + source_name + ".a"
148
+ def lib_file_name( source_name, target )
149
+ return construct_target_name( source_name, "lib", ".a", target )
150
150
  end
151
151
 
152
152
  # See description at MxxRu::Cpp::Toolset#lib_link_name.
153
- def lib_link_name( source_name )
153
+ def lib_link_name( source_name, target )
154
154
  return source_name
155
155
  end
156
156
 
@@ -168,8 +168,8 @@ module MxxRu
168
168
  end
169
169
 
170
170
  # See description at MxxRu::Cpp::Toolset#dll_file_name.
171
- def dll_file_name( source_name )
172
- return "lib" + source_name + ".so"
171
+ def dll_file_name( source_name, target )
172
+ return construct_target_name( source_name, 'lib', '.so', target )
173
173
  end
174
174
 
175
175
  # See description at MxxRu::Cpp::Toolset#implib_link_name.
@@ -179,7 +179,7 @@ module MxxRu
179
179
 
180
180
  # Target name should be passed to linker on UNIX platform
181
181
  return lib_link_name(
182
- File.basename( target.mxx_target_name ) )
182
+ File.basename( target.mxx_target_name ), target )
183
183
  end
184
184
 
185
185
  # See description at MxxRu::Cpp::Toolset#implib_link_path.
@@ -240,8 +240,8 @@ module MxxRu
240
240
  end
241
241
 
242
242
  # See description at MxxRu::Cpp::Toolset#exe_file_name.
243
- def exe_file_name( source_name )
244
- return source_name
243
+ def exe_file_name( source_name, target )
244
+ return construct_target_name( source_name, NO_PREFIX, NO_SUFFIX, target )
245
245
  end
246
246
 
247
247
  # See description at MxxRu::Cpp::Toolset#make_exe_command_lines.
@@ -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,
@@ -146,12 +146,12 @@ module MxxRu
146
146
  end
147
147
 
148
148
  # See description at MxxRu::Cpp::Toolset#lib_file_name.
149
- def lib_file_name( source_name )
150
- return "lib" + source_name + ".a"
149
+ def lib_file_name( source_name, target )
150
+ return construct_target_name( source_name, 'lib', '.a', target )
151
151
  end
152
152
 
153
153
  # See description at MxxRu::Cpp::Toolset#lib_link_name.
154
- def lib_link_name( source_name )
154
+ def lib_link_name( source_name, target )
155
155
  return source_name
156
156
  end
157
157
 
@@ -169,8 +169,8 @@ module MxxRu
169
169
  end
170
170
 
171
171
  # See description at MxxRu::Cpp::Toolset#dll_file_name.
172
- def dll_file_name( source_name )
173
- return "lib" + source_name + ".so"
172
+ def dll_file_name( source_name, target )
173
+ return construct_target_name( source_name, 'lib', '.so', target )
174
174
  end
175
175
 
176
176
  # See description at MxxRu::Cpp::Toolset#implib_link_name.
@@ -180,7 +180,7 @@ module MxxRu
180
180
 
181
181
  # Target name should be passed to linker on UNIX platform
182
182
  return lib_link_name(
183
- File.basename( target.mxx_target_name ) )
183
+ File.basename( target.mxx_target_name ), target )
184
184
  end
185
185
 
186
186
  # See description at MxxRu::Cpp::Toolset#implib_link_path.
@@ -244,8 +244,8 @@ module MxxRu
244
244
  end
245
245
 
246
246
  # See description at MxxRu::Cpp::Toolset#exe_file_name.
247
- def exe_file_name( source_name )
248
- return source_name
247
+ def exe_file_name( source_name, target )
248
+ return construct_target_name( source_name, NO_PREFIX, NO_SUFFIX, target )
249
249
  end
250
250
 
251
251
  # See description at MxxRu::Cpp::Toolset#make_exe_command_lines.
@@ -318,8 +318,8 @@ module MxxRu
318
318
  public
319
319
 
320
320
  # See description at MxxRu::Cpp::Toolset#exe_file_name.
321
- def exe_file_name( source_name )
322
- return source_name + ".exe"
321
+ def exe_file_name( source_name, target )
322
+ return construct_target_name( source_name, NO_PREFIX, ".exe", target )
323
323
  end
324
324
 
325
325
  # See description at MxxRu::Cpp::Toolset#clean_dll_specific_files.
@@ -333,7 +333,7 @@ module MxxRu
333
333
  # Delete import library if exists.
334
334
  if nil != a_dll_info.link_name
335
335
  implib_name = File.join( [ a_dll_info.link_path,
336
- lib_file_name( a_dll_info.link_name ) ] )
336
+ lib_file_name( a_dll_info.link_name, a_target ) ] )
337
337
  MxxRu::Util::delete_file( implib_name )
338
338
  end
339
339
  end
@@ -345,7 +345,7 @@ module MxxRu
345
345
 
346
346
  # It's required to pass import library name to linker on mswin platform
347
347
  if nil != target.mxx_implib_path
348
- return lib_link_name( target.mxx_target_name )
348
+ return lib_link_name( target.mxx_target_name, target )
349
349
  end
350
350
 
351
351
  return nil
@@ -388,7 +388,7 @@ module MxxRu
388
388
  # Build import library if it's required.
389
389
  if nil != a_dll_info.link_name
390
390
  full_lib_name = File.join( [ a_dll_info.link_path,
391
- lib_file_name( a_dll_info.link_name ) ] )
391
+ lib_file_name( a_dll_info.link_name, a_target ) ] )
392
392
 
393
393
  return "-Wl,--out-implib=#{full_lib_name}" +
394
394
  ",--export-all-symbols"
@@ -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,
@@ -244,13 +244,13 @@ module MxxRu
244
244
  end
245
245
 
246
246
  # See description at MxxRu::Cpp::Toolset#lib_file_name.
247
- def lib_file_name( source_name )
248
- return source_name + ".lib"
247
+ def lib_file_name( source_name, target )
248
+ return construct_target_name( source_name, NO_PREFIX, '.lib', target )
249
249
  end
250
250
 
251
251
  # See description at MxxRu::Cpp::Toolset#lib_link_name.
252
- def lib_link_name( source_name )
253
- return lib_file_name( source_name )
252
+ def lib_link_name( source_name, target )
253
+ return lib_file_name( source_name, target )
254
254
  end
255
255
 
256
256
  # See description at MxxRu::Cpp::Toolset#make_lib_command_lines.
@@ -268,8 +268,8 @@ module MxxRu
268
268
  end
269
269
 
270
270
  # See description at MxxRu::Cpp::Toolset#dll_file_name.
271
- def dll_file_name( source_name )
272
- return source_name + ".dll"
271
+ def dll_file_name( source_name, target )
272
+ return construct_target_name( source_name, NO_PREFIX, ".dll", target )
273
273
  end
274
274
 
275
275
  # See description at MxxRu::Cpp::Toolset#implib_link_name.
@@ -279,7 +279,7 @@ module MxxRu
279
279
 
280
280
  # Import library should be defined explicitly for Visual C++.
281
281
  if nil != target.mxx_implib_path
282
- return lib_file_name( target.mxx_target_name )
282
+ return lib_file_name( target.mxx_target_name, target )
283
283
  end
284
284
 
285
285
  return nil
@@ -348,8 +348,8 @@ module MxxRu
348
348
  end
349
349
 
350
350
  # See description at MxxRu::Cpp::Toolset#exe_file_name.
351
- def exe_file_name( source_name )
352
- return source_name + ".exe"
351
+ def exe_file_name( source_name, target )
352
+ return construct_target_name( source_name, NO_PREFIX, ".exe", target )
353
353
  end
354
354
 
355
355
  # See description at MxxRu::Cpp::Toolset#make_exe_command_lines.
@@ -0,0 +1,173 @@
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
+ # Since v.1.4.2
30
+ #
31
+ # Implementation of project's stabs generation for C++ build.rb root project file.
32
+
33
+ require 'erb'
34
+ require 'optparse'
35
+
36
+ require 'mxx_ru/generators/impl/std_receiver'
37
+
38
+ module MxxRu
39
+
40
+ module Generators
41
+
42
+ module CppBuildRoot
43
+
44
+ # Class for storing command-line arguments as options.
45
+ #
46
+ # Usage:
47
+ # options = Options.parse( args, banner )
48
+ #
49
+ class Options
50
+ # Name of output file (-o, --output-file). nil if missing.
51
+ attr_accessor :output_file
52
+
53
+ # Parsing command-line arguments and returning Options instance.
54
+ #
55
+ # Calls exit(1) if --help present in _args_.
56
+ #
57
+ def Options.parse( args, banner )
58
+ parser = OptionParser.new
59
+
60
+ result = Options.new
61
+
62
+ parser.banner = banner
63
+
64
+ parser.on( '-o', '--output-file FILE', 'Output file name' ) do |p|
65
+ result.output_file = p
66
+ end
67
+
68
+ parser.on_tail( '-h', '--help', 'Show this message' ) do
69
+ puts parser
70
+ exit(1)
71
+ end
72
+
73
+ parser.parse!( args )
74
+ result
75
+ end
76
+ end # class Options
77
+
78
+ # Class to be used in ERb template generation.
79
+ #
80
+ # Usage:
81
+ # template_params = TemplateParams.new( target_type, options )
82
+ # template = ERb.new( IO.read( some_template_file ) )
83
+ # result = template.generate( template.get_binding )
84
+ #
85
+ class TemplateParams
86
+ # For a case when output_file is undetectable.
87
+ DEFAULT_BUILD_ROOT = 'build.rb'
88
+
89
+ # Name of build root file.
90
+ attr_reader :build_root_project
91
+
92
+ # Param target_type must be present in @@setup_target_functions.
93
+ def initialize( options )
94
+ @build_root_project = try_detect_build_root_project( options )
95
+ end
96
+
97
+ # Returns binding to use in ERb generation.
98
+ def get_binding
99
+ binding
100
+ end
101
+
102
+ private
103
+ # Try to setup name of build root project file.
104
+ #
105
+ # If --output-file specified then its value used.
106
+ # Otherwise value 'build.rb' is used.
107
+ #
108
+ def try_detect_build_root_project( options )
109
+ options.output_file ?
110
+ File.basename( options.output_file ) :
111
+ DEFAULT_BUILD_ROOT
112
+ end
113
+
114
+ end # class TemplateParams
115
+
116
+ # Main class for code generation of binary unit test projects.
117
+ #
118
+ # Usage:
119
+ # receiver = StdReceiver.new
120
+ # generator = Generator.new( args, receiver )
121
+ # generator.run
122
+ #
123
+ class Generator
124
+ def initialize( args, receiver )
125
+ @args = args
126
+ @receiver = receiver
127
+ end
128
+
129
+ def run
130
+ options = Options.parse( @args,
131
+ "Stubs for C++ build root file generator\n\n" +
132
+ "Usage:\n" +
133
+ "mxxrugen [<mxxrugen-options>] cpp-build-root [<options>]\n\n" )
134
+ result = do_generation( options )
135
+ @receiver.receive( result, options.output_file )
136
+ end
137
+
138
+ private
139
+ # Performs main generation actions.
140
+ #
141
+ # Returns generation result as String.
142
+ def do_generation( options )
143
+ template = IO.read( File.join( File.dirname( __FILE__ ), 'template.erb' ) )
144
+ generator = ERB.new( template )
145
+
146
+ params = TemplateParams.new( options )
147
+ generator.result( params.get_binding ).gsub( /\n\n\n+/, "\n\n" )
148
+ end
149
+ end
150
+
151
+ # Helper method for generation.
152
+ #
153
+ # Usage:
154
+ # # For using StdReceiver.
155
+ # generate_for( ARGV )
156
+ #
157
+ # # For using custom Receiver.
158
+ # generate_for( ARGV, CustomReceiver.new )
159
+ #
160
+ def CppBuildRoot.generate_for( args, receiver = nil )
161
+ generator = Generator.new( args,
162
+ receiver ? receiver : MxxRu::Generators::Impl::StdReceiver.new )
163
+ generator.run
164
+ end
165
+
166
+ end # module BinaryUnittest
167
+
168
+ end # module Generators
169
+
170
+ end # module MxxRu
171
+
172
+ MxxRu::Generators::CppBuildRoot::generate_for( ARGV )
173
+
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+
3
+ gem 'Mxx_ru', '>= 1.3.0'
4
+
5
+ require 'mxx_ru/cpp'
6
+
7
+ MxxRu::Cpp::composite_target( MxxRu::BUILD_ROOT ) {
8
+ global_inclide_path '.'
9
+ default_runtime_mode MxxRu::Cpp::RUNTIME_RELEASE
10
+ MxxRu::enable_show_brief
11
+
12
+ # Include your projects here:
13
+ # require_prj 'your-project.rb'
14
+ }
15
+
@@ -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,
@@ -34,5 +34,5 @@
34
34
  #
35
35
  # puts 'Mxx_ru version is: ' + MXX_RU_VERSION
36
36
  #
37
- MXX_RU_VERSION = '1.4.1'
37
+ MXX_RU_VERSION = '1.4.2'
38
38
 
@@ -0,0 +1,8 @@
1
+ #include <iostream>
2
+
3
+ void
4
+ dummy()
5
+ {
6
+ std::cout << "hello, world!" << std::endl;
7
+ }
8
+
@@ -0,0 +1,13 @@
1
+ require 'mxx_ru/cpp'
2
+
3
+ Mxx_ru::Cpp::dll_target {
4
+
5
+ Mxx_ru::enable_show_brief
6
+
7
+ target( 'dll' )
8
+ target_prefix( 'p-' )
9
+ target_suffix( '.s' )
10
+
11
+ cpp_source 'dll.cpp'
12
+ }
13
+
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+
3
+ require File.dirname( __FILE__ ) + '/../../test_with_compilation'
4
+
5
+ class TC_CustomTargetPrefix < Test::Unit::TestCase
6
+ include TestWithCompilation
7
+
8
+ EXPECTED_NAME = 'p-dll.s'
9
+
10
+ test_path 'tests/cpp/custom_target_prefix'
11
+
12
+ test_case :build_and_clean do
13
+ build( 'dll.rb' )
14
+
15
+ assert( File.exists?( EXPECTED_NAME ),
16
+ "Expected name is '#{EXPECTED_NAME}'" )
17
+
18
+ clean( 'dll.rb' )
19
+ end
20
+
21
+ end
22
+
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: Mxx_ru
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.4.1
7
- date: 2007-06-25 00:00:00 +04:00
6
+ version: 1.4.2
7
+ date: 2008-02-15 00:00:00 +03:00
8
8
  summary: Mxx_ru (Make++ on Ruby) is a cross-platform build tool
9
9
  require_paths:
10
10
  - lib
@@ -58,16 +58,25 @@ files:
58
58
  - tests/cpp/cpp_sources_glob/some/module
59
59
  - tests/cpp/cpp_sources_glob/some/module/1
60
60
  - tests/cpp/cpp_sources_glob/some/module/1/f1.cpp
61
+ - tests/cpp/cpp_sources_glob/some/module/1/o
61
62
  - tests/cpp/cpp_sources_glob/some/module/2
62
63
  - tests/cpp/cpp_sources_glob/some/module/2/f2.cpp
64
+ - tests/cpp/cpp_sources_glob/some/module/2/o
63
65
  - tests/cpp/cpp_sources_glob/some/module/3
64
66
  - tests/cpp/cpp_sources_glob/some/module/3/f3.cpp
67
+ - tests/cpp/cpp_sources_glob/some/module/3/o
65
68
  - tests/cpp/cpp_sources_glob/some/module/4
66
69
  - tests/cpp/cpp_sources_glob/some/module/4/f4.cpp
70
+ - tests/cpp/cpp_sources_glob/some/module/4/o
67
71
  - tests/cpp/cpp_sources_glob/some/module/funcs.hpp
68
72
  - tests/cpp/cpp_sources_glob/some/module/main.cpp
73
+ - tests/cpp/cpp_sources_glob/some/module/o
69
74
  - tests/cpp/cpp_sources_glob/some/module/prj.rb
70
75
  - tests/cpp/cpp_sources_glob/tc_cpp_sources_glob.rb
76
+ - tests/cpp/custom_target_prefix
77
+ - tests/cpp/custom_target_prefix/dll.cpp
78
+ - tests/cpp/custom_target_prefix/dll.rb
79
+ - tests/cpp/custom_target_prefix/tc_custom_target_prefix.rb
71
80
  - tests/cpp/mswin_res_dll
72
81
  - tests/cpp/mswin_res_dll/build.rb
73
82
  - tests/cpp/mswin_res_dll/dll.cpp
@@ -96,6 +105,7 @@ files:
96
105
  - tests/cpp/mswin_res_exe/src
97
106
  - tests/cpp/mswin_res_exe/src/main.cpp
98
107
  - tests/cpp/mswin_res_exe/src/main.rc
108
+ - tests/cpp/mswin_res_exe/src/o
99
109
  - tests/cpp/mswin_res_exe/tc_mswin_res_exe.rb
100
110
  - tests/cpp/o
101
111
  - tests/cpp/rucodegen
@@ -204,6 +214,7 @@ files:
204
214
  - tests/mxx_ru/lib_collection/i.rb
205
215
  - tests/mxx_ru/lib_collection/main.cpp
206
216
  - tests/mxx_ru/lib_collection/main.rb
217
+ - tests/mxx_ru/lib_collection/o
207
218
  - tests/mxx_ru/lib_collection/tc_lib_collection.rb
208
219
  - tests/mxx_ru/lib_path
209
220
  - tests/mxx_ru/lib_path/build.rb
@@ -215,6 +226,7 @@ files:
215
226
  - tests/mxx_ru/lib_path/hi_lib
216
227
  - tests/mxx_ru/lib_path/main.c
217
228
  - tests/mxx_ru/lib_path/main.rb
229
+ - tests/mxx_ru/lib_path/o
218
230
  - tests/mxx_ru/lib_path/tc_lib_path.rb
219
231
  - tests/mxx_ru/obj_placements
220
232
  - tests/mxx_ru/obj_placements/tc_custom_subdir.rb
@@ -224,6 +236,7 @@ files:
224
236
  - tests/mxx_ru/opt_lib_ext/hi.h
225
237
  - tests/mxx_ru/opt_lib_ext/hi.rb
226
238
  - tests/mxx_ru/opt_lib_ext/main.c
239
+ - tests/mxx_ru/opt_lib_ext/o
227
240
  - tests/mxx_ru/opt_lib_ext/tc_opt_lib_ext.rb
228
241
  - tests/mxx_ru/opt_lib_ext/test-no-ext.rb
229
242
  - tests/mxx_ru/opt_lib_ext/test-with-ext.rb
@@ -235,6 +248,7 @@ files:
235
248
  - tests/mxx_ru/target_ext/dll_hi.cpp
236
249
  - tests/mxx_ru/target_ext/exe_hi.cpp
237
250
  - tests/mxx_ru/target_ext/lib_hi.cpp
251
+ - tests/mxx_ru/target_ext/o
238
252
  - tests/mxx_ru/target_ext/prj_dll.rb
239
253
  - tests/mxx_ru/target_ext/prj_exe.rb
240
254
  - tests/mxx_ru/target_ext/prj_lib.rb
@@ -353,6 +367,9 @@ files:
353
367
  - lib/mxx_ru/generators/bin-unittest
354
368
  - lib/mxx_ru/generators/bin-unittest/g.rb
355
369
  - lib/mxx_ru/generators/bin-unittest/template.erb
370
+ - lib/mxx_ru/generators/cpp-build-root
371
+ - lib/mxx_ru/generators/cpp-build-root/g.rb
372
+ - lib/mxx_ru/generators/cpp-build-root/template.erb
356
373
  - lib/mxx_ru/generators/cpp-composite
357
374
  - lib/mxx_ru/generators/cpp-composite/g.rb
358
375
  - lib/mxx_ru/generators/cpp-dll
@@ -388,6 +405,8 @@ files:
388
405
  - examples/exe_dll_lib/say.hpp
389
406
  - examples/exe_dll_lib/say.rb
390
407
  - examples/exe_dll_lib_2
408
+ - examples/exe_dll_lib_2/bin
409
+ - examples/exe_dll_lib_2/bin/lib
391
410
  - examples/exe_dll_lib_2/build.rb
392
411
  - examples/exe_dll_lib_2/inout
393
412
  - examples/exe_dll_lib_2/inout/inout.cpp
@@ -404,6 +423,11 @@ files:
404
423
  - examples/exe_dll_lib_2/say/prj.rb
405
424
  - examples/exe_dll_lib_2/say/say.cpp
406
425
  - examples/exe_dll_lib_2/say/say.hpp
426
+ - examples/exe_dll_lib_2/tmp
427
+ - examples/exe_dll_lib_2/tmp/output
428
+ - examples/exe_dll_lib_2/tmp/output/inout
429
+ - examples/exe_dll_lib_2/tmp/output/main
430
+ - examples/exe_dll_lib_2/tmp/output/say
407
431
  - examples/simple_exe
408
432
  - examples/simple_exe/main.cpp
409
433
  - examples/simple_exe/prj.rb