ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/TemplateInterface.pm
Revision: 1.2
Committed: Fri Dec 10 13:41:37 2004 UTC (20 years, 4 months ago) by sashby
Content type: text/plain
Branch: MAIN
CVS Tags: V1_0_3-p4, V1_0_3-p3, V1_0_3-p2, V1_0_4p1, V1_0_3-p1, V1_0_3, V1_0_2, V1_0_2_p1, v102p1, V1_0_1, V1_0_0
Branch point for: v103_with_xml, v103_branch
Changes since 1.1: +152 -0 lines
Log Message:
Merged V1_0 branch to HEAD

File Contents

# User Rev Content
1 sashby 1.2 #____________________________________________________________________
2     # File: TemplateInterface.pm
3     #____________________________________________________________________
4     #
5     # Author: Shaun Ashby <Shaun.Ashby@cern.ch>
6     # Update: 2004-07-01 14:03:46+0200
7     # Revision: $Id: TemplateInterface.pm,v 1.1.2.4 2004/08/25 13:44:07 sashby Exp $
8     #
9     # Copyright: 2004 (C) Shaun Ashby
10     #
11     #--------------------------------------------------------------------
12     package BuildSystem::TemplateInterface;
13     require 5.004;
14     use Exporter;
15     @ISA=qw(Exporter);
16     @EXPORT_OK=qw( );
17    
18     sub new()
19     ###############################################################
20     # new #
21     ###############################################################
22     # modified : Thu Jul 1 14:04:01 2004 / SFA #
23     # params : #
24     # : #
25     # function : #
26     # : #
27     ###############################################################
28     {
29     my $proto=shift;
30     my $class=ref($proto) || $proto;
31     my $self={};
32    
33     bless $self,$class;
34    
35     # Process the environment hash and extract a
36     # list of vars that are needed for building.
37     # NB: This is done once only!
38     my %exportenv;
39     map
40     {
41     if ($_ =~ /^SCRAM/ || $_ =~ /(LOCAL|RELEASE)TOP$/)
42     {
43     $exportenv{$_} = $ENV{$_} if ($_ !~ /^SCRAMRT\_.*$/);
44     }
45     } keys %ENV;
46    
47     # Add the environment information to the TEMPLATE_DATA hash:
48     $self->{TEMPLATE_DATA} = { 'environment' => \%exportenv };
49    
50     # The filehandle for the generated Makefile:
51     my $makefile="$ENV{LOCALTOP}/$ENV{SCRAM_INTwork}/Makefile";
52    
53     use FileHandle;
54     $self->{MAKEFILEFH} = FileHandle->new();
55     $self->{MAKEFILEFH}->open("> $makefile");
56    
57     # Init and pass in the template location:
58     $self->_init(@_);
59     return $self;
60     }
61    
62     sub _init()
63     {
64     my $self=shift;
65     my ($templatedir)=@_;
66    
67     # Set the location where the templates may be found:
68     $self->template_dir($templatedir);
69     # Configure the template object:
70     $self->template_config();
71     # Create the new Template object:
72     $self->template_object();
73     return $self;
74     }
75    
76     sub template_object()
77     {
78     my $self=shift;
79    
80     # Instantiate a new Template object:
81     eval("use Template");
82    
83     if ($@)
84     {
85     print "\nSCRAM Error: It appears that the module \"Template.pm\" is not installed.","\n";
86     print " Please check your installaion. If you are an administrator,","\n";
87     print " you can find the Perl Template Toolkit at www.cpan.org or at","\n";
88     print " the web site of the author (Andy Wardley):","\n";
89     print "\n";
90     print " www.template-toolkit.com","\n";
91     print "\n";
92     print " You should install version 2.xx (2.13 or better).","\n";
93     print "\nscram-developers\@cern.ch","\n\n";
94     exit(1);
95     }
96     else
97     {
98     $self->{TEMPLATE_OBJECT} = Template->new($self->{TEMPLATE_CONFIG});
99     }
100    
101     return $self;
102     }
103    
104     sub template_dir()
105     {
106     my $self=shift;
107     my ($templatedir)=@_;
108     $templatedir ||= $ENV{LOCALTOP}."/".$ENV{SCRAM_CONFIGDIR};
109     $self->{TEMPLATE_DIR} = $templatedir;
110     return $self;
111     }
112    
113     sub template_config()
114     {
115     my $self=shift;
116    
117     # Set up Template opts:
118     $self->{TEMPLATE_CONFIG} =
119     {
120     INCLUDE_PATH => $self->{TEMPLATE_DIR},
121     PLUGIN_BASE => [ qw(SCRAM::Plugins BuildSystem::Template::Plugins) ],
122     EVAL_PERL => 1
123     };
124    
125     return $self;
126     }
127    
128     sub template_data()
129     {
130     my $self=shift;
131     my ($data) = @_;
132    
133     # Set the things that we must set. The "data" key points
134     # to a DataCollector object. The "branch" data is a
135     # TreeItem object:
136     $self->{TEMPLATE} = $data->template();
137     # Add required data accessed by key:
138     $self->{TEMPLATE_DATA}->{branch} = $data;
139     }
140    
141     sub run()
142     {
143     my $self=shift;
144     local *FH = $self->{MAKEFILEFH};
145    
146     $self->{TEMPLATE_OBJECT}->process($self->{TEMPLATE},
147     $self->{TEMPLATE_DATA},
148     $self->{MAKEFILEFH} )
149     || die "SCRAM: Template error --> ",$self->{TEMPLATE_OBJECT}->error;
150     }
151    
152     1;