1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#! /usr/bin/perl
# usage :
# $1 class name - ie in upper camel case - no 'ut_' prepended
$duisrcdir="../src";
# catch wrong usage
if ( "$ARGV[0]" eq "" || "$ARGV[0]" =~ "^ut_" ) {
print "usage: $0 <DuiClassName>\n";
exit -1;
}
$camelClassName="$ARGV[0]";
$lowerClassName=lc( $camelClassName );
$upperClassName=uc( $camelClassName );
$camelMkUtClassName="MkUtClassName";
$lowerMkUtClassName=lc( $camelMkUtClassName );
$upperMkUtClassName=uc( $camelMkUtClassName );
$srcDir="../src";
$unitH="$srcDir/${lowerClassName}.h";
$unitCpp="$srcDir/${lowerClassName}.cpp";
$targetDir="ut_$lowerClassName";
if ( -e "$targetDir" ) {
print "$targetDir/ already exists - too risky to overwrite, please delete manually\n";
exit -1;
}
@bases = ();
$thisFile=$unitH;
$thisBase=getBase( $thisFile, $camelClassName );
while ( "$thisBase" ne "" ) {
push @bases, $thisBase;
$thisFile="../src/".lc( $thisBase ).".h";
$thisBase=getBase( $thisFile, $thisBase );
}
foreach $duiWidget (@bases) {
$lowerDuiWidget=lc($duiWidget);
$newBaseSource="\$\$DUISRCDIR\/${lowerDuiWidget}.cpp \\";
$newBaseHeader="\$\$DUISRCDIR\/${lowerDuiWidget}.h \\";
push @baseSources, $newBaseSource;
push @baseHeaders, $newBaseHeader;
}
#$newServiceHeader="\$\$DUISRCDIR\/${lowerDuiWidget}.h \$\$STUBSDIR\/${lowerDuiWidget}_stub.h \\";
$allBaseSources = "";
$allBaseHeaders = "";
$allBaseSources = "\t".join( "\n\t", @baseSources ) if ( @baseSources );
$allBaseHeaders = "\t".join( "\n\t", @baseHeaders ) if ( @baseHeaders );
# make the directory
if ( ! -e "$targetDir" ) {
mkdir $targetDir;
}
$classHeader = "${lowerClassName}.h";
$classHeaderP = "${lowerClassName}_p.h";
$classInclude = "#include <$classHeader>";
$classIncludeP = "";
if ( -e "$duisrcdir/$classHeaderP" ) {
$classIncludeP = "#include <$classHeaderP>";
}
## copy template
foreach $file ( glob( "template/*" ) ) {
$base=basename($file);
$targetFile="$targetDir/$base";
$targetFile=~s/template/$lowerClassName/;
open INFILE, "<$file" || die( "Could not read from $file:$!" );
open OUTFILE, ">$targetFile" || die( "Could not write to $targetFile:$!" );
while (<INFILE>) {
$_ =~ s/^\s*mkutserviceheaders//g;
$_ =~ s/^\s*mkutbasesources/$allBaseSources/g;
$_ =~ s/^\s*mkutbaseheaders/$allBaseHeaders/g;
$_ =~ s/$camelMkUtClassName/$camelClassName/g;
$_ =~ s/$lowerMkUtClassName/$lowerClassName/g;
$_ =~ s/$upperMkUtClassName/$upperClassName/g;
$_ =~ s/^mkutclassinclude$/$classInclude/g;
$_ =~ s/^mkutclassinclude_p$/$classIncludeP/g;
$_ =~ s/MKUTCLASSMEMBERS//g;
print OUTFILE "$_";
}
close OUTFILE;
close INFILE;
}
sub getBase
{
my ($thisFile, $thisBase)=@_;
my $retVal="";
open THISFILE, "<$thisFile";
while (<THISFILE>) {
if ( /class\s+$thisBase\s*:\s*\S+\s+(Dui\S+)/ ) {
$retVal=$1;
last;
}
}
close THISFILE;
return $retVal;
}
sub basename
{
my ($filename)=@_;
my @bits=split( /\//, $filename );
return $bits[ @bits-1 ];
}
|