Mxx_ru 1.1.0 → 1.2.0
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/NEWS +17 -0
- data/Rakefile +3 -3
- data/THANKS +1 -0
- data/lib/mxx_ru/abstract_target.rb +34 -4
- data/lib/mxx_ru/cpp/composite.rb +2 -1
- data/lib/mxx_ru/cpp/qt.rb +8 -4
- data/lib/mxx_ru/cpp/rucodegen.rb +8 -2
- data/lib/mxx_ru/cpp/target.rb +39 -2
- data/lib/mxx_ru/cpp/toolset.rb +20 -5
- data/lib/mxx_ru/cpp/toolsets/bcc_win32_family.rb +3 -1
- data/lib/mxx_ru/cpp/toolsets/gcc_family.rb +21 -2
- data/lib/mxx_ru/cpp/toolsets/gcc_mingw.rb +4 -0
- data/lib/mxx_ru/makestyle_generator.rb +4 -1
- data/lib/mxx_ru/util.rb +58 -8
- data/tests/cpp/cpp_sources_glob/build.rb +7 -0
- data/tests/cpp/cpp_sources_glob/some/module/1/f1.cpp +8 -0
- data/tests/cpp/cpp_sources_glob/some/module/2/f2.cpp +8 -0
- data/tests/cpp/cpp_sources_glob/some/module/3/f3.cpp +8 -0
- data/tests/cpp/cpp_sources_glob/some/module/4/f4.cpp +8 -0
- data/tests/cpp/cpp_sources_glob/some/module/funcs.hpp +9 -0
- data/tests/cpp/cpp_sources_glob/some/module/main.cpp +11 -0
- data/tests/cpp/cpp_sources_glob/some/module/prj.rb +10 -0
- data/tests/cpp/rucodegen/prj.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_dll_no_implib.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_dll_no_implib_simple_target_root.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_dll_with_implib.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_dll_with_implib_simple_target_root.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_exe_no_implib.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_exe_no_implib_simple_target_root.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_lib.rb +1 -1
- data/tests/cpp/vc_cleanup/prj_lib_with_simple_target_root.rb +1 -1
- data/tests/mxx_ru/plural_form_methods/tc.rb +72 -0
- metadata +27 -2
    
        data/NEWS
    CHANGED
    
    | @@ -1,5 +1,22 @@ | |
| 1 1 | 
             
            Changes in Mxx_ru
         | 
| 2 2 |  | 
| 3 | 
            +
            1.2.0 version (2006.04.15)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              Added command-line arguments --mxx-brief-show, --mxx-brief-hide and
         | 
| 6 | 
            +
              method Mxx_ru.enable_show_brief for controlling brief description of
         | 
| 7 | 
            +
              executed commands.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              Argument prj_alias for composite_target, exe_target, lib_target and
         | 
| 10 | 
            +
              dll_target now optional. If it omitted than Mxx_ru try detect prj_alias form
         | 
| 11 | 
            +
              Kernel#caller result (assume what call to *_target method was made directly
         | 
| 12 | 
            +
              in project file).
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              Added methods Abstract_target#required_prjs, Cpp::Target#c_sources,
         | 
| 15 | 
            +
              Cpp::Target#cpp_sources those accept Enumerable (plural form for
         | 
| 16 | 
            +
              corresponding singular analogs). New methods can accept result of Dir.glob().
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              Some fixes for MinGW C++, Borland C++ compilers.
         | 
| 19 | 
            +
             | 
| 3 20 | 
             
            1.1.0 version (2006.02..2006.04)
         | 
| 4 21 |  | 
| 5 22 | 
             
              Documentation and commentaries are translated to english.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -4,18 +4,18 @@ Gem::manage_gems | |
| 4 4 | 
             
            require 'rake/gempackagetask'
         | 
| 5 5 |  | 
| 6 6 | 
             
            PKG_NAME = 
         | 
| 7 | 
            -
            RKG_VERSION = '1. | 
| 7 | 
            +
            RKG_VERSION = '1.2.0'
         | 
| 8 8 |  | 
| 9 9 | 
             
            spec = Gem::Specification.new do |s|
         | 
| 10 10 | 
             
              s.name = "Mxx_ru"
         | 
| 11 | 
            -
              s.version = "1. | 
| 11 | 
            +
              s.version = "1.2.0"
         | 
| 12 12 | 
             
              s.author = "The Mxx_ru Project"
         | 
| 13 13 | 
             
              s.email = "eao197@yahoo.com"
         | 
| 14 14 | 
             
              s.homepage = "http://www.rubyforge.com/projects/mxx-ru"
         | 
| 15 15 | 
             
              s.platform = Gem::Platform::RUBY
         | 
| 16 16 | 
             
              s.summary = "Mxx_ru (Make++ on Ruby) is a cross-platform build tool"
         | 
| 17 17 | 
             
              s.files = FileList[ "{bin,tests,lib,docs,examples}/**/*" ].
         | 
| 18 | 
            -
                  exclude( "rdoc" ).to_a
         | 
| 18 | 
            +
                  exclude( "rdoc" ).to_a + [ "THANKS" ]
         | 
| 19 19 | 
             
              s.require_path = "lib"
         | 
| 20 20 | 
             
            # s.autorequire = "rucodegen"
         | 
| 21 21 | 
             
            # s.test_file = "tests/ts_rucodegen.rb"
         | 
    
        data/THANKS
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            Konstantine Nazarov (rut at user dot sourceforge dot net)
         | 
| @@ -179,6 +179,25 @@ module Mxx_ru | |
| 179 179 | 
             
                # Vector of source code generators.
         | 
| 180 180 | 
             
                attr_reader :mxx_generators
         | 
| 181 181 |  | 
| 182 | 
            +
                # Metacode for generating 'plural' version of singular method.
         | 
| 183 | 
            +
                # Plural version accept Enumerable-type argument and call
         | 
| 184 | 
            +
                # singular version for each member of Enumerable argument.
         | 
| 185 | 
            +
                #
         | 
| 186 | 
            +
                # For example:
         | 
| 187 | 
            +
                #  define_plural_form_method :required_prj
         | 
| 188 | 
            +
                #  define_plural_form_method :cpp_source
         | 
| 189 | 
            +
                # produces methods
         | 
| 190 | 
            +
                #   required_prjs( items )
         | 
| 191 | 
            +
                #   cpp_sources( items )
         | 
| 192 | 
            +
                #
         | 
| 193 | 
            +
                def Abstract_target.define_plural_form_method( singular_method )
         | 
| 194 | 
            +
                  class_eval %Q{
         | 
| 195 | 
            +
                    def #{singular_method}s(a)
         | 
| 196 | 
            +
                      a.each { |e| #{singular_method}( e ) }
         | 
| 197 | 
            +
                    end
         | 
| 198 | 
            +
                  }
         | 
| 199 | 
            +
                end
         | 
| 200 | 
            +
             | 
| 182 201 | 
             
                def initialize( a_prj_alias )
         | 
| 183 202 | 
             
                  @mxx_full_targets_names = Array.new
         | 
| 184 203 | 
             
                  @mxx_prj_alias = a_prj_alias
         | 
| @@ -214,6 +233,13 @@ module Mxx_ru | |
| 214 233 | 
             
                  return target
         | 
| 215 234 | 
             
                end
         | 
| 216 235 |  | 
| 236 | 
            +
                # Plural form of required_prj.
         | 
| 237 | 
            +
                #
         | 
| 238 | 
            +
                # For example:
         | 
| 239 | 
            +
                #  required_prjs [ 'module1/prj.rb', 'module2/prj.rb' ]
         | 
| 240 | 
            +
                #  required_prjs Dir.glob( 'modules/**/prj.rb' )
         | 
| 241 | 
            +
                define_plural_form_method :required_prj
         | 
| 242 | 
            +
             | 
| 217 243 | 
             
                # Add one more generator to the target.
         | 
| 218 244 | 
             
                # Reference to the target is returned.
         | 
| 219 245 | 
             
                def generator( a_generator )
         | 
| @@ -236,12 +262,16 @@ module Mxx_ru | |
| 236 262 | 
             
                #
         | 
| 237 263 | 
             
                # [a_cmd_lines] Array of String
         | 
| 238 264 | 
             
                # [a_to_destroy_on_fail] Files required to be cleaned up if any of given command fail.
         | 
| 239 | 
            -
                 | 
| 265 | 
            +
                # [brief_desc] Brief description of command (will be shown if --mxx-brief-desc
         | 
| 266 | 
            +
                #              specified in command line)
         | 
| 267 | 
            +
                def Abstract_target.run( a_cmd_lines, a_to_destroy_on_fail, brief_desc = nil )
         | 
| 268 | 
            +
             | 
| 269 | 
            +
                  puts "#{brief_desc.capitalize} ..." \
         | 
| 270 | 
            +
                      if Mxx_ru::Util::Mode.instance.is_brief_desc and nil != brief_desc
         | 
| 240 271 |  | 
| 241 272 | 
             
                  a_cmd_lines.each { |c|
         | 
| 242 | 
            -
                       | 
| 243 | 
            -
             | 
| 244 | 
            -
                      end
         | 
| 273 | 
            +
                      puts "<<< #{c} >>>" \
         | 
| 274 | 
            +
                          if Mxx_ru::Util::Mode.instance.is_show_cmd
         | 
| 245 275 |  | 
| 246 276 | 
             
                      # Do not actually execute in dry-run mode.
         | 
| 247 277 | 
             
                      if !Mxx_ru::Util::Mode.instance.is_dry_run
         | 
    
        data/lib/mxx_ru/cpp/composite.rb
    CHANGED
    
    | @@ -96,7 +96,8 @@ module  Mxx_ru | |
| 96 96 | 
             
                #     required_prj 'some_project.rb'
         | 
| 97 97 | 
             
                #     required_prj 'some_another_project.rb'
         | 
| 98 98 | 
             
                #   }
         | 
| 99 | 
            -
                def Cpp.composite_target( prj_alias, &block )
         | 
| 99 | 
            +
                def Cpp.composite_target( prj_alias = nil, &block )
         | 
| 100 | 
            +
                  prj_alias = Mxx_ru::Util::prj_alias_form_caller( caller ) unless prj_alias
         | 
| 100 101 | 
             
                  Mxx_ru::setup_target Composite_target.new( prj_alias, &block )
         | 
| 101 102 | 
             
                end
         | 
| 102 103 |  | 
    
        data/lib/mxx_ru/cpp/qt.rb
    CHANGED
    
    | @@ -173,14 +173,16 @@ module Cpp | |
| 173 173 | 
             
                      header_file, [ ui ] ).state
         | 
| 174 174 | 
             
                      Mxx_ru::Abstract_target::run(
         | 
| 175 175 | 
             
                        [ "#{@uic_name} -o #{header_file} #{ui}" ],
         | 
| 176 | 
            -
                        [ header_file ] | 
| 176 | 
            +
                        [ header_file ],
         | 
| 177 | 
            +
                        "building header file #{header_file}" )
         | 
| 177 178 | 
             
                    end
         | 
| 178 179 | 
             
                    if Target_state::EXISTS != Target_state.detect(
         | 
| 179 180 | 
             
                      cpp_file, [ ui, header_file ] ).state
         | 
| 180 181 | 
             
                      Mxx_ru::Abstract_target::run(
         | 
| 181 182 | 
             
                        [ "#{@uic_name} -i #{header_file} " +
         | 
| 182 183 | 
             
                          "-o #{cpp_file} #{ui}" ],
         | 
| 183 | 
            -
                        [ cpp_file ] | 
| 184 | 
            +
                        [ cpp_file ],
         | 
| 185 | 
            +
                        "building source file #{cpp_file}" )
         | 
| 184 186 | 
             
                    end
         | 
| 185 187 | 
             
                  }
         | 
| 186 188 | 
             
                end
         | 
| @@ -225,7 +227,8 @@ module Cpp | |
| 225 227 | 
             
                      Mxx_ru::Abstract_target::run(
         | 
| 226 228 | 
             
                        [ "#{moc_name} -o #{moc_full} " + 
         | 
| 227 229 | 
             
                          "#{header_full}" ],
         | 
| 228 | 
            -
                        [ moc_full ] | 
| 230 | 
            +
                        [ moc_full ],
         | 
| 231 | 
            +
                        "building moc file #{moc_full}" )
         | 
| 229 232 | 
             
                    end
         | 
| 230 233 |  | 
| 231 234 | 
             
                    add_cpp_source( a_target, moc )
         | 
| @@ -282,7 +285,8 @@ module Cpp | |
| 282 285 | 
             
                      Mxx_ru::Abstract_target::run(
         | 
| 283 286 | 
             
                        [ "#{moc_name} -o #{moc_full} " + 
         | 
| 284 287 | 
             
                          "#{cpp_full}" ],
         | 
| 285 | 
            -
                        [ moc_full ] | 
| 288 | 
            +
                        [ moc_full ],
         | 
| 289 | 
            +
                        "building moc file #{moc_full}" )
         | 
| 286 290 | 
             
                    end
         | 
| 287 291 | 
             
                  }
         | 
| 288 292 | 
             
                end
         | 
    
        data/lib/mxx_ru/cpp/rucodegen.rb
    CHANGED
    
    | @@ -88,14 +88,20 @@ class RuCodeGen < Abstract_generator | |
| 88 88 | 
             
              # Perform code generation.
         | 
| 89 89 | 
             
              def build( target )
         | 
| 90 90 | 
             
                @scripts.each do |s|
         | 
| 91 | 
            -
                  Abstract_target.run( | 
| 91 | 
            +
                  Abstract_target.run(
         | 
| 92 | 
            +
                      make_build_cmd( s, :build ),
         | 
| 93 | 
            +
                      [],
         | 
| 94 | 
            +
                      "running code generation script #{s} (build mode)" )
         | 
| 92 95 | 
             
                end
         | 
| 93 96 | 
             
              end
         | 
| 94 97 |  | 
| 95 98 | 
             
              # Perform cleanup of generated files.
         | 
| 96 99 | 
             
              def clean( target )
         | 
| 97 100 | 
             
                @scripts.each do |s|
         | 
| 98 | 
            -
                  Abstract_target.run( | 
| 101 | 
            +
                  Abstract_target.run(
         | 
| 102 | 
            +
                      make_build_cmd( s, :clean ),
         | 
| 103 | 
            +
                      [],
         | 
| 104 | 
            +
                      "running code generation script #{s} (clean mode)" )
         | 
| 99 105 | 
             
                end
         | 
| 100 106 | 
             
              end
         | 
| 101 107 |  | 
    
        data/lib/mxx_ru/cpp/target.rb
    CHANGED
    
    | @@ -788,6 +788,18 @@ module Mxx_ru | |
| 788 788 |  | 
| 789 789 | 
             
                  # Add one C-file to the target.
         | 
| 790 790 | 
             
                  #
         | 
| 791 | 
            +
                  # Note: if a_file_name contains prefix equal to current sources_root
         | 
| 792 | 
            +
                  # than mxx_ru does not add sources_root to name of file. For example:
         | 
| 793 | 
            +
                  #   Mxx_ru::Cpp::exe_target( 'some/module/prj.rb' ) {
         | 
| 794 | 
            +
                  #     ...
         | 
| 795 | 
            +
                  #     c_source 'f1.c' # become 'some/module/f1.c'
         | 
| 796 | 
            +
                  #     c_source 'some/module/impl/f2.c' # remains 'some/module/impl/f2.c
         | 
| 797 | 
            +
                  # This approach will be useful with Dir.glob:
         | 
| 798 | 
            +
                  #   Mxx_ru::Cpp::exe_target( 'some/module/prj.rb' ) {
         | 
| 799 | 
            +
                  #     ...
         | 
| 800 | 
            +
                  #     c_sources Dir.glob( 'some/module/**/*.c' )
         | 
| 801 | 
            +
                  #   }
         | 
| 802 | 
            +
                  #
         | 
| 791 803 | 
             
                  # [_a_file_name_] The name of a file added.
         | 
| 792 804 | 
             
                  # [_a_options_] Optional list of a compiler options for that file.
         | 
| 793 805 | 
             
                  #               When command line would be created, this options would
         | 
| @@ -799,6 +811,18 @@ module Mxx_ru | |
| 799 811 |  | 
| 800 812 | 
             
                  # Add one C++-file to the target.
         | 
| 801 813 | 
             
                  #
         | 
| 814 | 
            +
                  # Note: if a_file_name contains prefix equal to current sources_root
         | 
| 815 | 
            +
                  # than mxx_ru does not add sources_root to name of file. For example:
         | 
| 816 | 
            +
                  #   Mxx_ru::Cpp::exe_target( 'some/module/prj.rb' ) {
         | 
| 817 | 
            +
                  #     ...
         | 
| 818 | 
            +
                  #     cpp_source 'f1.cpp' # become 'some/module/f1.cpp'
         | 
| 819 | 
            +
                  #     cpp_source 'some/module/impl/f2.cpp' # remains 'some/module/impl/f2.cpp
         | 
| 820 | 
            +
                  # This approach will be useful with Dir.glob:
         | 
| 821 | 
            +
                  #   Mxx_ru::Cpp::exe_target( 'some/module/prj.rb' ) {
         | 
| 822 | 
            +
                  #     ...
         | 
| 823 | 
            +
                  #     cpp_sources Dir.glob( 'some/module/**/*.cpp' )
         | 
| 824 | 
            +
                  #   }
         | 
| 825 | 
            +
                  #
         | 
| 802 826 | 
             
                  # [_a_file_name_] The name of a file added.
         | 
| 803 827 | 
             
                  # [_a_options_] Optional list of a compiler options for that file.
         | 
| 804 828 | 
             
                  #               When command line would be created, this options would
         | 
| @@ -808,6 +832,11 @@ module Mxx_ru | |
| 808 832 | 
             
                      create_full_src_file_name( a_file_name ), a_options ) )
         | 
| 809 833 | 
             
                  end
         | 
| 810 834 |  | 
| 835 | 
            +
                  # Plural form for c_source and cpp_source. Does not allow specify options
         | 
| 836 | 
            +
                  # for source files.
         | 
| 837 | 
            +
                  define_plural_form_method :c_source
         | 
| 838 | 
            +
                  define_plural_form_method :cpp_source
         | 
| 839 | 
            +
             | 
| 811 840 | 
             
                  # Set mswin resource file name.
         | 
| 812 841 | 
             
                  #
         | 
| 813 842 | 
             
                  # [_a_rc_file_] The name of rc-file.
         | 
| @@ -936,11 +965,18 @@ module Mxx_ru | |
| 936 965 |  | 
| 937 966 | 
             
                  # Creation of a complete name of a source file
         | 
| 938 967 | 
             
                  # taking the value of mxx_sources_root into account
         | 
| 968 | 
            +
                  #
         | 
| 969 | 
            +
                  # If a_file_name starts with current value of mxx_sources_root
         | 
| 970 | 
            +
                  # than a_file_name remains unchanged.
         | 
| 939 971 | 
             
                  def create_full_src_file_name( a_file_name )
         | 
| 940 972 | 
             
                    if "" == mxx_sources_root
         | 
| 941 973 | 
             
                      return a_file_name
         | 
| 942 974 | 
             
                    else
         | 
| 943 | 
            -
                       | 
| 975 | 
            +
                      if a_file_name[ 0..mxx_sources_root.size ] == mxx_sources_root + '/'
         | 
| 976 | 
            +
                        return a_file_name
         | 
| 977 | 
            +
                      else
         | 
| 978 | 
            +
                        return File.join( [ mxx_sources_root, a_file_name ] )
         | 
| 979 | 
            +
                      end
         | 
| 944 980 | 
             
                    end
         | 
| 945 981 | 
             
                  end
         | 
| 946 982 |  | 
| @@ -1356,7 +1392,8 @@ module Mxx_ru | |
| 1356 1392 | 
             
                def Cpp.generate_simple_target_method( target_type )
         | 
| 1357 1393 | 
             
                  target_class_name = target_type.to_s.capitalize
         | 
| 1358 1394 | 
             
                  class_eval %Q{
         | 
| 1359 | 
            -
                    def Cpp.#{target_type}( prj_alias, &block )
         | 
| 1395 | 
            +
                    def Cpp.#{target_type}( prj_alias = nil, &block )
         | 
| 1396 | 
            +
                      prj_alias = Mxx_ru::Util::prj_alias_form_caller( caller ) unless prj_alias
         | 
| 1360 1397 | 
             
                      Mxx_ru::setup_target #{target_class_name}.new( prj_alias, &block )
         | 
| 1361 1398 | 
             
                    end
         | 
| 1362 1399 | 
             
                  }
         | 
    
        data/lib/mxx_ru/cpp/toolset.rb
    CHANGED
    
    | @@ -353,7 +353,10 @@ module  Mxx_ru | |
| 353 353 | 
             
                        full_name, target.mxx_mswin_rc_file.name,
         | 
| 354 354 | 
             
                        target.mxx_all_mswin_rc_options, target )
         | 
| 355 355 |  | 
| 356 | 
            -
                      Mxx_ru::Abstract_target::run( | 
| 356 | 
            +
                      Mxx_ru::Abstract_target::run(
         | 
| 357 | 
            +
                          cmd_lines,
         | 
| 358 | 
            +
                          [ full_name ],
         | 
| 359 | 
            +
                          "compilling #{full_name}" )
         | 
| 357 360 |  | 
| 358 361 | 
             
                      state = Mxx_ru::Target_state.new( Mxx_ru::Target_state::REBUILT )
         | 
| 359 362 | 
             
                    end
         | 
| @@ -406,7 +409,10 @@ module  Mxx_ru | |
| 406 409 | 
             
                        lib_file, target.mxx_obj_files,
         | 
| 407 410 | 
             
                        target.mxx_all_librarian_options, target )
         | 
| 408 411 |  | 
| 409 | 
            -
                      Mxx_ru::Abstract_target::run( | 
| 412 | 
            +
                      Mxx_ru::Abstract_target::run(
         | 
| 413 | 
            +
                          cmd_lines,
         | 
| 414 | 
            +
                          [ lib_file ],
         | 
| 415 | 
            +
                          "building #{lib_file}" )
         | 
| 410 416 |  | 
| 411 417 | 
             
                      lib_state = Mxx_ru::Target_state.new( Mxx_ru::Target_state::REBUILT )
         | 
| 412 418 | 
             
                    end
         | 
| @@ -486,7 +492,10 @@ module  Mxx_ru | |
| 486 492 | 
             
                      cmd_lines = make_dll_command_lines(
         | 
| 487 493 | 
             
                        dll_file, dll_info, link_lists, target )
         | 
| 488 494 |  | 
| 489 | 
            -
                      Mxx_ru::Abstract_target::run( | 
| 495 | 
            +
                      Mxx_ru::Abstract_target::run(
         | 
| 496 | 
            +
                          cmd_lines,
         | 
| 497 | 
            +
                          [ dll_file ],
         | 
| 498 | 
            +
                          "building #{dll_file}" )
         | 
| 490 499 |  | 
| 491 500 | 
             
                      dll_state = Mxx_ru::Target_state.new( Mxx_ru::Target_state::REBUILT )
         | 
| 492 501 | 
             
                    end
         | 
| @@ -555,7 +564,10 @@ module  Mxx_ru | |
| 555 564 | 
             
                      cmd_lines = make_exe_command_lines(
         | 
| 556 565 | 
             
                        exe_file, exe_info, link_lists, target )
         | 
| 557 566 |  | 
| 558 | 
            -
                      Mxx_ru::Abstract_target::run( | 
| 567 | 
            +
                      Mxx_ru::Abstract_target::run(
         | 
| 568 | 
            +
                          cmd_lines,
         | 
| 569 | 
            +
                          [ exe_file ],
         | 
| 570 | 
            +
                          "building #{exe_file}" )
         | 
| 559 571 |  | 
| 560 572 | 
             
                      exe_state = Mxx_ru::Target_state.new( Mxx_ru::Target_state::REBUILT )
         | 
| 561 573 | 
             
                    end
         | 
| @@ -893,7 +905,10 @@ module  Mxx_ru | |
| 893 905 | 
             
                          target )
         | 
| 894 906 |  | 
| 895 907 | 
             
                        # Executing.
         | 
| 896 | 
            -
                        Mxx_ru::Abstract_target::run( | 
| 908 | 
            +
                        Mxx_ru::Abstract_target::run(
         | 
| 909 | 
            +
                            cmd_lines,
         | 
| 910 | 
            +
                            [ o.name ],
         | 
| 911 | 
            +
                            "compiling #{o.source.name}" )
         | 
| 897 912 | 
             
                      }
         | 
| 898 913 |  | 
| 899 914 | 
             
                  end
         | 
| @@ -428,7 +428,9 @@ module  Mxx_ru | |
| 428 428 |  | 
| 429 429 | 
             
                      if 0 != a_linker_lists.lib_paths.size
         | 
| 430 430 | 
             
                        result << "/L;"
         | 
| 431 | 
            -
                        a_linker_lists.lib_paths.each { |p| | 
| 431 | 
            +
                        unix2win_mass( a_linker_lists.lib_paths ).each { |p|
         | 
| 432 | 
            +
                          result << "#{p};"
         | 
| 433 | 
            +
                        }
         | 
| 432 434 | 
             
                        result << " "
         | 
| 433 435 | 
             
                      end
         | 
| 434 436 |  | 
| @@ -206,7 +206,9 @@ module  Mxx_ru | |
| 206 206 | 
             
                      a_linker_lists.lib_paths.each { |p| result << "-L#{p} " }
         | 
| 207 207 |  | 
| 208 208 | 
             
                      result << "#{a_linker_lists.objs.join(' ')} "
         | 
| 209 | 
            -
                      a_linker_lists.libs.each { |l| | 
| 209 | 
            +
                      a_linker_lists.libs.each { |l|
         | 
| 210 | 
            +
                          result << "-l#{port_specific_lib_name_checker(l)} "
         | 
| 211 | 
            +
                      }
         | 
| 210 212 |  | 
| 211 213 | 
             
                      result << port_specific_dll_link_options(
         | 
| 212 214 | 
             
                        a_dll_name, a_dll_info, a_linker_lists, a_target )
         | 
| @@ -258,7 +260,9 @@ module  Mxx_ru | |
| 258 260 | 
             
                      a_linker_lists.lib_paths.each { |p| result << "-L#{p} " }
         | 
| 259 261 |  | 
| 260 262 | 
             
                      result << "#{a_linker_lists.objs.join(' ')} "
         | 
| 261 | 
            -
                      a_linker_lists.libs.each { |l| | 
| 263 | 
            +
                      a_linker_lists.libs.each { |l|
         | 
| 264 | 
            +
                          result << "-l#{port_specific_lib_name_checker(l)} "
         | 
| 265 | 
            +
                      }
         | 
| 262 266 |  | 
| 263 267 | 
             
                      result << port_specific_exe_link_options(
         | 
| 264 268 | 
             
                        a_exe_name, a_exe_info, a_linker_lists, a_target )
         | 
| @@ -286,6 +290,11 @@ module  Mxx_ru | |
| 286 290 | 
             
                      return ""
         | 
| 287 291 | 
             
                    end
         | 
| 288 292 |  | 
| 293 | 
            +
                    # Return correct name of library to be given for linker.
         | 
| 294 | 
            +
                    def port_specific_lib_name_checker(library_name)
         | 
| 295 | 
            +
                      library_name
         | 
| 296 | 
            +
                    end
         | 
| 297 | 
            +
             | 
| 289 298 | 
             
                  end # class Gcc_family
         | 
| 290 299 |  | 
| 291 300 | 
             
                  # Toolset implemetation for GCC compiler for Win32.
         | 
| @@ -373,6 +382,16 @@ module  Mxx_ru | |
| 373 382 | 
             
                      return ""
         | 
| 374 383 | 
             
                    end
         | 
| 375 384 |  | 
| 385 | 
            +
                    # Checks library name for suffix '.lib' and return name without
         | 
| 386 | 
            +
                    # that suffix.
         | 
| 387 | 
            +
                    def port_specific_lib_name_checker(library_name)
         | 
| 388 | 
            +
                      if /\.lib$/i =~ library_name
         | 
| 389 | 
            +
                        Mxx_ru::Util::remove_file_ext(library_name)            
         | 
| 390 | 
            +
                      else
         | 
| 391 | 
            +
                        library_name
         | 
| 392 | 
            +
                      end
         | 
| 393 | 
            +
                    end
         | 
| 394 | 
            +
             | 
| 376 395 | 
             
                  end # class Gcc_mswin_family
         | 
| 377 396 |  | 
| 378 397 | 
             
                end # module Toolsets
         | 
| @@ -64,6 +64,10 @@ module  Mxx_ru | |
| 64 64 | 
             
                        target.linker_option( "-mconsole" )
         | 
| 65 65 | 
             
                      end
         | 
| 66 66 |  | 
| 67 | 
            +
                      if THREADING_MULTI == target.mxx_threading_mode
         | 
| 68 | 
            +
                        target.compiler_option( "-mthreads" )
         | 
| 69 | 
            +
                      end
         | 
| 70 | 
            +
             | 
| 67 71 | 
             
                      # ��� defines � ��� include_path ������ ���������������� � ��
         | 
| 68 72 | 
             
                      # ���������� ��������.
         | 
| 69 73 | 
             
                      target.mxx_all_defines.each { |d|
         | 
| @@ -100,7 +100,10 @@ class Makestyle_generator < Abstract_generator | |
| 100 100 |  | 
| 101 101 | 
             
                if need_build
         | 
| 102 102 | 
             
                  # It's required to run all commands to build target.
         | 
| 103 | 
            -
                  Abstract_target.run( | 
| 103 | 
            +
                  Abstract_target.run(
         | 
| 104 | 
            +
                      @build_cmds,
         | 
| 105 | 
            +
                      [],
         | 
| 106 | 
            +
                      "building #{@target_files.join(', ')}" )
         | 
| 104 107 | 
             
                end
         | 
| 105 108 | 
             
              end
         | 
| 106 109 |  | 
    
        data/lib/mxx_ru/util.rb
    CHANGED
    
    | @@ -41,10 +41,15 @@ module Mxx_ru | |
| 41 41 | 
             
                MXXARG_KEEP_TMPS = "--mxx-keep-tmps"
         | 
| 42 42 | 
             
                MXXARG_SHOW_TMPS = "--mxx-show-tmps"
         | 
| 43 43 | 
             
                MXXARG_DRY_RUN = "--mxx-dry-run"
         | 
| 44 | 
            +
                MXXARG_BRIEF_DESC = '--mxx-brief-show'
         | 
| 45 | 
            +
                MXXARG_BRIEF_DESC_DISABLED = '--mxx-brief-hide'
         | 
| 44 46 |  | 
| 45 47 | 
             
                # OS name, script is run on.
         | 
| 46 48 | 
             
                @@host_os = nil
         | 
| 47 49 |  | 
| 50 | 
            +
                # Regular expression to parse entries in Kernel#caller result.
         | 
| 51 | 
            +
                CALLER_ENTRY_REGEX = /^(.+):\d+(:in\s.+){0,1}$/
         | 
| 52 | 
            +
             | 
| 48 53 | 
             
                # Class, which detects Mxx_ru current mode.
         | 
| 49 54 | 
             
                class Mode
         | 
| 50 55 | 
             
                  include Singleton
         | 
| @@ -53,6 +58,7 @@ module Mxx_ru | |
| 53 58 | 
             
                  attr_reader :is_show_cmd
         | 
| 54 59 | 
             
                  attr_reader :is_keep_tmps
         | 
| 55 60 | 
             
                  attr_reader :is_show_tmps
         | 
| 61 | 
            +
                  attr_reader :is_brief_desc
         | 
| 56 62 |  | 
| 57 63 | 
             
                  # Constructor checks for special arguments in command line.
         | 
| 58 64 | 
             
                  def initialize
         | 
| @@ -61,6 +67,11 @@ module Mxx_ru | |
| 61 67 | 
             
                    @is_keep_tmps = ARGV.include?( MXXARG_KEEP_TMPS )
         | 
| 62 68 | 
             
                    @is_show_tmps = ARGV.include?( MXXARG_SHOW_TMPS )
         | 
| 63 69 | 
             
                    @is_dry_run = ARGV.include?( MXXARG_DRY_RUN )
         | 
| 70 | 
            +
                    @is_brief_desc = ARGV.include?( MXXARG_BRIEF_DESC )
         | 
| 71 | 
            +
                    @is_brief_desc_disabled = ARGV.include?( MXXARG_BRIEF_DESC_DISABLED )
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                    @is_brief_desc = false if @is_brief_desc_disabled
         | 
| 74 | 
            +
             | 
| 64 75 | 
             
                    @is_manual_dry_run = false
         | 
| 65 76 | 
             
                  end
         | 
| 66 77 |  | 
| @@ -73,11 +84,18 @@ module Mxx_ru | |
| 73 84 |  | 
| 74 85 | 
             
                  # On/Off manual dry-run mode.
         | 
| 75 86 | 
             
                  # In some cases it's efficient to turn it on for some time.
         | 
| 76 | 
            -
                  # For example, it's used to handle subprojects with --mxx-cpp-1 option | 
| 87 | 
            +
                  # For example, it's used to handle subprojects with --mxx-cpp-1 option
         | 
| 88 | 
            +
                  # set.
         | 
| 77 89 | 
             
                  def manual_dry_run( a_is_manual_dry_run )
         | 
| 78 90 | 
             
                    @is_manual_dry_run = a_is_manual_dry_run
         | 
| 79 91 | 
             
                  end
         | 
| 80 92 |  | 
| 93 | 
            +
                  # Try to manually enable 'show-brief' mode. Attempt ignored if
         | 
| 94 | 
            +
                  # '--mxx-show-brief-disabled' was specified.
         | 
| 95 | 
            +
                  def try_enable_show_brief
         | 
| 96 | 
            +
                    @is_brief_desc = true unless @is_brief_desc_disabled
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 81 99 | 
             
                end
         | 
| 82 100 |  | 
| 83 101 | 
             
                # Returns file name without last extension.
         | 
| @@ -177,10 +195,10 @@ module Mxx_ru | |
| 177 195 |  | 
| 178 196 | 
             
                end # class Tmp_files
         | 
| 179 197 |  | 
| 180 | 
            -
                # Auxiliary function for correct execution of build method of target | 
| 181 | 
            -
                # Before execution Tmp_files.push is executed, and after execution | 
| 182 | 
            -
                # Tmp_files.pop is called. This way we are removing | 
| 183 | 
            -
                # created during a compilation of given target.
         | 
| 198 | 
            +
                # Auxiliary function for correct execution of build method of target
         | 
| 199 | 
            +
                # object.  Before execution Tmp_files.push is executed, and after execution
         | 
| 200 | 
            +
                # of build method Tmp_files.pop is called. This way we are removing
         | 
| 201 | 
            +
                # temporary files created during a compilation of given target.
         | 
| 184 202 | 
             
                def Util.build_call_wrapper( a_target )
         | 
| 185 203 | 
             
                  begin
         | 
| 186 204 | 
             
                    Tmp_files.instance.push
         | 
| @@ -194,8 +212,8 @@ module Mxx_ru | |
| 194 212 | 
             
                # Create folder if it isn't exist.
         | 
| 195 213 | 
             
                #
         | 
| 196 214 | 
             
                # All chain of names is tracked. For example, if we trying to create
         | 
| 197 | 
            -
                # output/release/lib folder, and only output is exists, then release/lib | 
| 198 | 
            -
                # are created.
         | 
| 215 | 
            +
                # output/release/lib folder, and only output is exists, then release/lib
         | 
| 216 | 
            +
                # folders are created.
         | 
| 199 217 | 
             
                def Util.create_dir( a_name )
         | 
| 200 218 | 
             
                  # Dividing the chain.
         | 
| 201 219 | 
             
                  chain = Array.new
         | 
| @@ -219,7 +237,8 @@ module Mxx_ru | |
| 219 237 | 
             
                # If dry-run mode wasn't set, checking for existance.
         | 
| 220 238 | 
             
                # If it isn't exists, trying to create it.
         | 
| 221 239 | 
             
                #
         | 
| 222 | 
            -
                # In a dry-run mode Mxx_ru always assumes folder is exists, even if it | 
| 240 | 
            +
                # In a dry-run mode Mxx_ru always assumes folder is exists, even if it
         | 
| 241 | 
            +
                # isn't.
         | 
| 223 242 | 
             
                def Util.ensure_path_exists( a_path_name )
         | 
| 224 243 | 
             
                  if !Mxx_ru::Util::Mode.instance.is_dry_run
         | 
| 225 244 | 
             
                    if !FileTest.exists?( a_path_name )
         | 
| @@ -252,7 +271,38 @@ module Mxx_ru | |
| 252 271 | 
             
                  return a_pathname
         | 
| 253 272 | 
             
                end
         | 
| 254 273 |  | 
| 274 | 
            +
                # Extract file name from 'Kernel#caller' result for using this
         | 
| 275 | 
            +
                # name as project alias.
         | 
| 276 | 
            +
                def Util.prj_alias_form_caller( caller_result )
         | 
| 277 | 
            +
                  r = CALLER_ENTRY_REGEX.match( caller_result[ 0 ] )[ 1 ]
         | 
| 278 | 
            +
                  # Name can starts with './' ('./some/module/prj.rb'). That name
         | 
| 279 | 
            +
                  # must be transformed to 'some/module/prj.rb'.
         | 
| 280 | 
            +
                  if r[ 0..1 ] == './'
         | 
| 281 | 
            +
                    r[ 2...r.size ]
         | 
| 282 | 
            +
                  else
         | 
| 283 | 
            +
                    r
         | 
| 284 | 
            +
                  end
         | 
| 285 | 
            +
                end
         | 
| 286 | 
            +
             | 
| 255 287 | 
             
              end # module Util
         | 
| 256 288 |  | 
| 289 | 
            +
              # Manually enable 'show-brief' mode.
         | 
| 290 | 
            +
              #
         | 
| 291 | 
            +
              # Intended to use in project files:
         | 
| 292 | 
            +
              #   Mxx_ru::Cpp::exe_target( 'some.prj' ) {
         | 
| 293 | 
            +
              #     ...
         | 
| 294 | 
            +
              #     Mxx_ru::enable_show_brief
         | 
| 295 | 
            +
              #     ...
         | 
| 296 | 
            +
              #   }
         | 
| 297 | 
            +
              # 'show-brief' is global mode. Once enabled it cannot be disabled
         | 
| 298 | 
            +
              # form inside another project file.
         | 
| 299 | 
            +
              #
         | 
| 300 | 
            +
              # Call to Mxx_ru::enable_show_brief ignored if '--mxx-show-brief-disabled'
         | 
| 301 | 
            +
              # specified in command-line.
         | 
| 302 | 
            +
              #
         | 
| 303 | 
            +
              def Mxx_ru.enable_show_brief
         | 
| 304 | 
            +
                Util::Mode.instance.try_enable_show_brief
         | 
| 305 | 
            +
              end
         | 
| 306 | 
            +
             | 
| 257 307 | 
             
            end # module Mxx_ru
         | 
| 258 308 |  | 
    
        data/tests/cpp/rucodegen/prj.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            require 'mxx_ru/cpp'
         | 
| 2 2 | 
             
            require 'mxx_ru/cpp/rucodegen'
         | 
| 3 3 |  | 
| 4 | 
            -
            Mxx_ru::setup_target Mxx_ru::Cpp::Exe_target.new( " | 
| 4 | 
            +
            Mxx_ru::setup_target Mxx_ru::Cpp::Exe_target.new( "tests/cpp/rucodegen/prj.rb" ) {
         | 
| 5 5 | 
             
            	target "host_config"
         | 
| 6 6 |  | 
| 7 7 | 
             
            	rucodegen = generator Mxx_ru::Cpp::RuCodeGen.new( self )
         | 
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'mxx_ru/cpp'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TC_PluralFormMethods < Test::Unit::TestCase
         | 
| 6 | 
            +
              def test_required_prj
         | 
| 7 | 
            +
                test_value = [ 'test_required_prj_sub1', 'test_required_prj_sub2' ]
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                test_value.each { |p| Mxx_ru::Cpp::composite_target( p ) {} }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                t = Mxx_ru::Cpp::composite_target( 'test_required_prj' ) {
         | 
| 12 | 
            +
                    required_prjs test_value
         | 
| 13 | 
            +
                  }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                assert_equal( test_value.size, t.mxx_required_prjs.size )
         | 
| 16 | 
            +
                t.mxx_required_prjs.each { |p|
         | 
| 17 | 
            +
                  assert( test_value.member?( p.prj_alias ) )
         | 
| 18 | 
            +
                }
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_c_sources
         | 
| 22 | 
            +
                test_files = [ 'hello.c', 'greeting.c' ]
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                t = Mxx_ru::setup_target(
         | 
| 25 | 
            +
                  Mxx_ru::Cpp::Exe_target.new( 'test_c_sources' ) {
         | 
| 26 | 
            +
                    target 'test_c_sources'
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    c_sources test_files
         | 
| 29 | 
            +
                  },
         | 
| 30 | 
            +
                  false )
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                defined_sources = t.mxx_c_files.inject( [] ) { |r, f| r << File.basename( f.name ) }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                assert_equal( test_files, defined_sources )
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def test_cpp_sources
         | 
| 38 | 
            +
                test_files = [ 'hello.cpp', 'greeting.cpp' ]
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                path = 'some/test'
         | 
| 41 | 
            +
                t = Mxx_ru::setup_target(
         | 
| 42 | 
            +
                  Mxx_ru::Cpp::Exe_target.new( "#{path}/test_cpp_sources" ) {
         | 
| 43 | 
            +
                    target 'test_cpp_sources'
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    cpp_sources test_files
         | 
| 46 | 
            +
                  },
         | 
| 47 | 
            +
                  false )
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                expected_sources = test_files.inject( [] ) { |r, f| r << "#{path}/#{f}" }
         | 
| 50 | 
            +
                defined_sources = t.mxx_cpp_files.inject( [] ) { |r, f| r << f.name }
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                assert_equal( expected_sources, defined_sources )
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              def test_cpp_sources_with_special_prefix
         | 
| 56 | 
            +
                path = 'some/test'
         | 
| 57 | 
            +
                test_files = [ "#{path}/hello.cpp", "#{path}/greeting.cpp" ]
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                t = Mxx_ru::setup_target(
         | 
| 60 | 
            +
                  Mxx_ru::Cpp::Exe_target.new( "#{path}/test_cpp_sources" ) {
         | 
| 61 | 
            +
                    target 'test_cpp_sources'
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    cpp_sources test_files
         | 
| 64 | 
            +
                  },
         | 
| 65 | 
            +
                  false )
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                defined_sources = t.mxx_cpp_files.inject( [] ) { |r, f| r << f.name }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                assert_equal( test_files, defined_sources )
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
            end
         | 
| 72 | 
            +
             | 
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.8.10 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: Mxx_ru
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 1. | 
| 7 | 
            -
            date: 2006-04- | 
| 6 | 
            +
              version: 1.2.0
         | 
| 7 | 
            +
            date: 2006-04-16
         | 
| 8 8 | 
             
            summary: Mxx_ru (Make++ on Ruby) is a cross-platform build tool
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
              - lib
         | 
| @@ -51,6 +51,7 @@ files: | |
| 51 51 | 
             
              - tests/c/pcre/perltest
         | 
| 52 52 | 
             
              - tests/c/pcre/printint.c
         | 
| 53 53 | 
             
              - tests/c/pcre/study.c
         | 
| 54 | 
            +
              - tests/cpp/cpp_sources_glob
         | 
| 54 55 | 
             
              - tests/cpp/mswin_res_dll
         | 
| 55 56 | 
             
              - tests/cpp/mswin_res_exe
         | 
| 56 57 | 
             
              - tests/cpp/o
         | 
| @@ -58,6 +59,25 @@ files: | |
| 58 59 | 
             
              - tests/cpp/textfile_unittest
         | 
| 59 60 | 
             
              - tests/cpp/toolset_name.rb
         | 
| 60 61 | 
             
              - tests/cpp/vc_cleanup
         | 
| 62 | 
            +
              - tests/cpp/cpp_sources_glob/build.rb
         | 
| 63 | 
            +
              - tests/cpp/cpp_sources_glob/some
         | 
| 64 | 
            +
              - tests/cpp/cpp_sources_glob/some/module
         | 
| 65 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/1
         | 
| 66 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/2
         | 
| 67 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/3
         | 
| 68 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/4
         | 
| 69 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/funcs.hpp
         | 
| 70 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/main.cpp
         | 
| 71 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/o
         | 
| 72 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/prj.rb
         | 
| 73 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/1/f1.cpp
         | 
| 74 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/1/o
         | 
| 75 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/2/f2.cpp
         | 
| 76 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/2/o
         | 
| 77 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/3/f3.cpp
         | 
| 78 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/3/o
         | 
| 79 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/4/f4.cpp
         | 
| 80 | 
            +
              - tests/cpp/cpp_sources_glob/some/module/4/o
         | 
| 61 81 | 
             
              - tests/cpp/mswin_res_dll/build.rb
         | 
| 62 82 | 
             
              - tests/cpp/mswin_res_dll/dll.cpp
         | 
| 63 83 | 
             
              - tests/cpp/mswin_res_dll/dll.rb
         | 
| @@ -120,6 +140,7 @@ files: | |
| 120 140 | 
             
              - tests/cpp/vc_cleanup/tc_vc_cleanup.rb
         | 
| 121 141 | 
             
              - tests/cpp/vc_cleanup/lib/simple_target_root
         | 
| 122 142 | 
             
              - tests/mxx_ru/change_default_value
         | 
| 143 | 
            +
              - tests/mxx_ru/plural_form_methods
         | 
| 123 144 | 
             
              - tests/mxx_ru/tc_makestyle_generator.rb
         | 
| 124 145 | 
             
              - tests/mxx_ru/vc8
         | 
| 125 146 | 
             
              - tests/mxx_ru/change_default_value/ignoring_by_build_root
         | 
| @@ -132,6 +153,7 @@ files: | |
| 132 153 | 
             
              - tests/mxx_ru/change_default_value/ignoring_by_child_1/child_2.rb
         | 
| 133 154 | 
             
              - tests/mxx_ru/change_default_value/ok/build.rb
         | 
| 134 155 | 
             
              - tests/mxx_ru/change_default_value/ok/child_1.rb
         | 
| 156 | 
            +
              - tests/mxx_ru/plural_form_methods/tc.rb
         | 
| 135 157 | 
             
              - tests/mxx_ru/vc8/tc_actual_manifest.rb
         | 
| 136 158 | 
             
              - tests/mxx_ru/vc8/tc_append_mt_commands.rb
         | 
| 137 159 | 
             
              - tests/mxx_ru/vc8/tc_default_manifest.rb
         | 
| @@ -145,10 +167,12 @@ files: | |
| 145 167 | 
             
              - tests/qt/aclock/aclock.cpp
         | 
| 146 168 | 
             
              - tests/qt/aclock/aclock.h
         | 
| 147 169 | 
             
              - tests/qt/aclock/main.cpp
         | 
| 170 | 
            +
              - tests/qt/aclock/o
         | 
| 148 171 | 
             
              - tests/qt/aclock/prj.rb
         | 
| 149 172 | 
             
              - tests/qt/iconview/main.cpp
         | 
| 150 173 | 
             
              - tests/qt/iconview/prj.rb
         | 
| 151 174 | 
             
              - tests/qt/toplevel/main.cpp
         | 
| 175 | 
            +
              - tests/qt/toplevel/o
         | 
| 152 176 | 
             
              - tests/qt/toplevel/options.ui
         | 
| 153 177 | 
             
              - tests/qt/toplevel/options.ui.h
         | 
| 154 178 | 
             
              - tests/qt/toplevel/prj.rb
         | 
| @@ -221,6 +245,7 @@ files: | |
| 221 245 | 
             
              - examples/exe_dll_lib_2/say/say.hpp
         | 
| 222 246 | 
             
              - examples/simple_exe/main.cpp
         | 
| 223 247 | 
             
              - examples/simple_exe/prj.rb
         | 
| 248 | 
            +
              - THANKS
         | 
| 224 249 | 
             
              - README
         | 
| 225 250 | 
             
              - Rakefile
         | 
| 226 251 | 
             
              - COPYING
         |