aboutsummaryrefslogtreecommitdiff
path: root/tests/mkUt
blob: cc02e0d0d1a237849cc6e6f018b661acab7bf05d (plain)
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 ];
}