Mxx_ru 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
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