#! /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 \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 () { $_ =~ 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 () { 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 ]; }