Class: BuildTool::Cfg::ModuleDeclarationNodeVisitor

Inherits:
ListVisitor show all
Defined in:
lib/build-tool/cfg/visitor.rb

Instance Attribute Summary

Attributes inherited from VisitorBase

#configuration

Instance Method Summary collapse

Methods inherited from ListVisitor

#visit, #visit_nodes

Constructor Details

#initialize(configuration) ⇒ ModuleDeclarationNodeVisitor

Returns a new instance of ModuleDeclarationNodeVisitor.



351
352
353
354
# File 'lib/build-tool/cfg/visitor.rb', line 351

def initialize( configuration )
    super
    @module = nil
end

Instance Method Details

#visit_ApplyPatchesNode(node) ⇒ Object



356
357
358
# File 'lib/build-tool/cfg/visitor.rb', line 356

def visit_ApplyPatchesNode( node )
    @module.patches << node.value
end

#visit_ArchiveDeclarationNode(node) ⇒ Object



360
361
362
363
364
365
366
367
368
# File 'lib/build-tool/cfg/visitor.rb', line 360

def visit_ArchiveDeclarationNode( node )
    vcs = BuildTool::VCS::ArchiveConfiguration.new
    # if @module.vcs_configuration and @module.vcs_configuration.name == "archive"
    #     vcs.copy_configuration( @module.vcs_configuration )
    # end
    @module.vcs_configuration = vcs
    visitor = ArchiveDeclarationNodeVisitor.new( configuration, vcs )
    node.accept( visitor )
end

#visit_BuildSystemDeclarationNode(node) ⇒ Object

Raises:



370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
# File 'lib/build-tool/cfg/visitor.rb', line 370

def visit_BuildSystemDeclarationNode( node )
    raise ArgumentsError if node.values.length != 2
    name  = node.values[0]
    # We have to create a build-system. There are some possibilities:
    #   1. The module has a build-system. Inherit from that one (Overloading)
    #   2. The module has a parent but no build-system: Create the build-system parentless
    #      so it forwards to the parent module
    #   3. The module has no parent and no build-system. Inherit from the build-system
    #      standard module.
    if @module.our_build_system
        # puts "Inherit from previous build-system for #{@module.name}"
        build_system = configuration.build_system_adjust( name, @module.our_build_system )
    elsif @module.parent
        # puts "Inherit without parent for #{@module.name}"
        build_system = configuration.build_system_adjust( name, nil )
    else
        # puts "Inherit from #{name} for #{@module.name}"
        build_system = configuration.build_system_adjust( name, configuration.build_system_defaults( name ) )
    end
    visitor = BuildSystemDeclarationNodeVisitor.new( configuration, build_system )
    @module.build_system = node.accept( visitor )
    @module.build_system.module = @module
    @module.build_system.feature = configuration.active_feature
end

#visit_EnvironmentDeclarationNode(node) ⇒ Object



402
403
404
405
# File 'lib/build-tool/cfg/visitor.rb', line 402

def visit_EnvironmentDeclarationNode( node )
    visitor = EnvironmentDeclarationNodeVisitor.new( configuration )
    @module.environment = node.accept( visitor )
end

#visit_GitDeclarationNode(node) ⇒ Object



407
408
409
410
411
412
413
414
415
416
417
418
419
# File 'lib/build-tool/cfg/visitor.rb', line 407

def visit_GitDeclarationNode( node )
    vcs = BuildTool::VCS::GitConfiguration.new
    # if @module.vcs_configuration and @module.vcs_configuration.name == "git"
    #     vcs.copy_configuration( @module.vcs_configuration )
    # end
    @module.vcs_configuration = vcs
    begin
        visitor = GitDeclarationNodeVisitor.new( configuration, vcs )
        node.accept( visitor )
    rescue ConfigurationError => e
        raise ConfigurationError, "Module #{@module.name}: #{e.to_s}"
    end
end

#visit_GitSvnDeclarationNode(node) ⇒ Object



421
422
423
424
425
426
427
428
429
# File 'lib/build-tool/cfg/visitor.rb', line 421

def visit_GitSvnDeclarationNode( node )
    vcs = BuildTool::VCS::GitSvnConfiguration.new
    # if @module.vcs_configuration and @module.vcs_configuration.name == "gitsvn"
    #     vcs.copy_configuration( @module.vcs_configuration )
    # end
    @module.vcs_configuration = vcs
    visitor = GitSvnDeclarationNodeVisitor.new( configuration, vcs )
    node.accept( visitor )
end

#visit_LongDescriptionNode(node) ⇒ Object



395
396
397
398
399
400
# File 'lib/build-tool/cfg/visitor.rb', line 395

def visit_LongDescriptionNode( node )
    if @module.long_description
        logger.warn "Overwriting long description for module #{@module.name}"
    end
    @module.long_description = node.values
end

#visit_ModuleBuildPrefixNode(node) ⇒ Object



431
432
433
# File 'lib/build-tool/cfg/visitor.rb', line 431

def visit_ModuleBuildPrefixNode( node )
    @module.build_prefix = node.value
end

#visit_ModuleDeclarationNode(node) ⇒ Object



435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
# File 'lib/build-tool/cfg/visitor.rb', line 435

def visit_ModuleDeclarationNode( node )
    name = node.values[0]
    inheritance = node.values[1] == :INHERITANCE
    if inheritance
        stmts = node.values[3]
    else
        stmts = node.values[1]
    end
    # Check if the module is alread defined. If yes we reopen it.
    @module = configuration.module( name )
    if @module
        if inheritance
            raise ConfigurationError, "Attempt change existing module #{name} with inheritance!"
        end
    else
        parent = nil
        if inheritance
            parentName = node.values[2]
            parent = configuration.module( parentName )
            if parent.nil?
                raise ConfigurationError,
                    "Module %s attempts to inherit from not existant module %s" % 
                        [ name, parentName ]
            end
        end
        @module = BuildTool::Module.new( name, parent )
        configuration.add_module( @module )
        # Only add a module to a feature if it is the first time declared.
        if !configuration.active_feature.nil?
            @module.feature = configuration.active_feature
            configuration.active_feature.modules << @module
        end
    end
    self.visit_nodes( stmts )
end

#visit_ModuleInstallPrefixNode(node) ⇒ Object



471
472
473
# File 'lib/build-tool/cfg/visitor.rb', line 471

def visit_ModuleInstallPrefixNode( node )
    @module.install_prefix = node.value
end

#visit_ModuleLocalPathNode(node) ⇒ Object



475
476
477
# File 'lib/build-tool/cfg/visitor.rb', line 475

def visit_ModuleLocalPathNode( node )
    @module.local_path = node.value
end

#visit_ModuleRemotePathNode(node) ⇒ Object



479
480
481
# File 'lib/build-tool/cfg/visitor.rb', line 479

def visit_ModuleRemotePathNode( node )
    @module.remote_path = node.value
end

#visit_ModuleTemplateNode(node) ⇒ Object



483
484
485
# File 'lib/build-tool/cfg/visitor.rb', line 483

def visit_ModuleTemplateNode( node )
    @module.is_template = true
end

#visit_RepositoryDeclarationNode(node) ⇒ Object



487
488
489
490
# File 'lib/build-tool/cfg/visitor.rb', line 487

def visit_RepositoryDeclarationNode( node )
    visitor = RepositoryDeclarationNodeVisitor.new( configuration )
    @module.repository = node.accept( visitor )
end

#visit_ShortDescriptionNode(node) ⇒ Object



492
493
494
495
496
497
# File 'lib/build-tool/cfg/visitor.rb', line 492

def visit_ShortDescriptionNode( node )
    if !@module.description.nil?
        logger.warn "Overwriting short description for module #{@module.name}"
    end
    @module.description = node.values
end

#visit_SvnDeclarationNode(node) ⇒ Object



499
500
501
502
503
504
505
506
507
# File 'lib/build-tool/cfg/visitor.rb', line 499

def visit_SvnDeclarationNode( node )
    vcs = BuildTool::VCS::SvnConfiguration.new
    # if @module.vcs_configuration and @module.vcs_configuration.name == "svn"
    #     vcs.copy_configuration( @module.vcs_configuration )
    # end
    @module.vcs_configuration = vcs
    visitor = SvnDeclarationNodeVisitor.new( configuration, vcs )
    node.accept( visitor )
end

#visit_UseBuildSystemNode(node) ⇒ Object



509
510
511
512
513
514
515
# File 'lib/build-tool/cfg/visitor.rb', line 509

def visit_UseBuildSystemNode( node )
    # puts "Inherit from build-system #{node.value} for #{@module.name}"
    @module.build_system = configuration.build_system_adjust(
        node.value,
        configuration.build_system_defaults( node.value ) )
    @module.build_system.module = @module
end

#visit_UseEnvironmentNode(node) ⇒ Object



517
518
519
520
521
522
# File 'lib/build-tool/cfg/visitor.rb', line 517

def visit_UseEnvironmentNode( node )
    @module.environment = configuration.environment( node.value )
    if @module.environment.nil?
        raise ConfigurationError, "Unknown environment #{node.value} configured for module #{@module.name}!"
    end
end

#visit_UseRepositoryNode(node) ⇒ Object



524
525
526
527
528
529
# File 'lib/build-tool/cfg/visitor.rb', line 524

def visit_UseRepositoryNode( node )
    @module.repository = configuration.repository( node.value )
    if @module.repository.nil?
        raise ConfigurationError, "Unknown repository #{node.value} configured for module #{@module.name}!"
    end
end

#visit_UseVcsNode(node) ⇒ Object



531
532
533
# File 'lib/build-tool/cfg/visitor.rb', line 531

def visit_UseVcsNode( node )
    @module.vcs_configuration = configuration.vcs(node.value)
end