msvcvers.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:46 2010 from msvcvers.pl 2009/11/14 6.5 KB.

#!/perl -w
# NAME: msvcvers.pl
# AIM: To check what VERSIONS of MSVC build files exist in a particular folder ...
# If *.dsp (and maybe *.dsp) then Version 6 (MSVC6)
# If *.sln (and maybe *.vcproj) then CHECK if 7 or 8 ...
# 14/11/2009 - minor update
use strict;
use warnings;
use File::stat;
use Cwd;
# so it can be run from anywhere ...
unshift(@INC, 'G:\GTools\perl');
#require 'logfile.pl' or die "Unable to load logfile.pl ...\n";
# log file stuff
#my ($LF);
my $pgmname = $0;
if ($pgmname =~ /(\\|\/)/) {
   my @tmparr = split(/(\\|\/)/,$pgmname);
   $pgmname = $tmparr[-1];
}
#my $outfile = 'temp.'.$0.'.txt';
#if ($0 =~ /\w{1}:\\.*/) {
#   my @tmpsp = split(/\\/,$0);
#   $outfile = 'temp.'.($tmpsp[-1]).'.txt';
#}
#open_log($outfile);
my $folder = 'G:\Gtools\tools\dc4w';
my $cwd = getcwd();
my @files = ();
my $fcnt = 0;
# debug
my $dbg1 = 0;   # show extent
my $dbg2 = 0;   # show directories
my $dbg3 = 0;   # show discards
my $dbg4 = 0;   # show folder in process
my $dbg5 = 0;   # show files is MSVC type
my $typ1 = 1;   # is DSW
my $typ2 = 2;   # is DSP
my $typ3 = 3;   # is SLN
my $typ4 = 4;   # is VCPROJ
# version counts
my $cver5 = 0;
my $cver6 = 0;
my $cver7 = 0;
my $cver8 = 0;
my $cver9 = 0;
my $cvero = 0;
my @others = ();
my $ctot = 0;
if (@ARGV) {
   $folder = pop(@ARGV);
   prt( "$pgmname: Set folder to $folder...\n" );
}
if ($folder eq '.') {
   $folder = $cwd;
}
scandir( $folder );
$fcnt = scalar @files;
if ($fcnt) {
   prt( "Found $fcnt MSVC files in folder, or sub-folder of, $folder ...\n" );
   eliminate_dupes();
   scanfiles();
   $ctot = $cver5 + $cver6 + $cver7 + $cver8 + $cver9 + $cvero;
   if ($ctot) {
      prt( "Found $ctot: " );
      if( $cver5 ) {
         prt( "$cver5 vers 5, " );
      }
      if( $cver6 ) {
         prt( "$cver6 vers 6, " );
      }
      if( $cver7 ) {
         prt( "$cver7 vers 7, " );
      }
      if( $cver8 ) {
         prt( "$cver8 vers 8, " );
      }
      if( $cver9 ) {
         prt( "$cver9 vers 9, " );
      }
      if( $cvero ) {
         # my @others = ();
         prt( "$cvero vers others " );
      }
      prt( "in $folder folder ...\n" );
      if( $cvero ) {
         foreach my $m (@others) {
            prt( "$m\n" );
         }
      }
   }
} else {
   prt( "Did NOT file any MSVC files in folder, or sub-folder of, $folder ...\n" );
}
#close_log($outfile,1);
#print "Deleting $outfile ...\n";
#if (unlink($outfile)==0) {
#   print "Deleted $outfile ...\n";
#} else {
#   print "WARNING: $outfile not deleted ...$! ...\n";
#}
exit(0);
# subs ========================
sub prt {
   my ($msg) = shift;
   print $msg;
}
sub eliminate_dupes {
   # push(@files, [$fdr, $fil, $ft, 1]);
   my ($i, $j, $cnt, $fdr, $fil, $typ, $ff, $sb, $act, $fn, $fn2);
   $cnt = scalar @files;
   for ($i = 0; $i < $cnt; $i++) {
      $fdr = $files[$i][0];
      $fil = $files[$i][1];
      $typ = $files[$i][2];
      $act = $files[$i][3];
      $ff = $fdr . '\\' . $fil;
      $sb = stat($ff);
      if (defined $sb) {
         if ($typ == $typ1) { # found a DSW
            # eliminate equivalent DSP, if it EXISTS
            $fn = uc(get_file_name($fil));
            for ($j = 0; $j < $cnt; $j++) {
               if ($i != $j) {
                  if ($files[$j][2] == $typ2) {
                     $fn2 = uc(get_file_name($files[$j][1]));
                     if ($fn eq $fn2) {
                        $files[$j][3] = 0;
                     }
                  }
               }
            }
         }
      } else {
         $files[$i][3] = 0;
         prt( "ERROR: Failed to stat [$ff] ... $! ...\n" );
      }
   }
}
sub get_file_name {
   my ($fil) = shift;
   my @arr = split(/\./,$fil);
   my $cnt = scalar @arr;
   $cnt-- if ($cnt > 1);
   my $rfn = ' ';
   for (my $i = 0; $i < $cnt; $i++) {
      $rfn .= '.' if (length($rfn));
      $rfn .= $arr[$i];
   }
   return $rfn;
}
sub ver_count {
   my ($v) = shift;
   if ($v == 5) {
      $cver5++;
   } elsif ($v == 6) {
      $cver6++;
   } elsif ($v == 7) {
      $cver7++;
   } elsif ($v == 8) {
      $cver8++;
   } elsif ($v == 9) {
      $cver9++;
   } else {
      $cvero++;
      return 1;
   }
   return 0;
}
sub scanfiles {
   # push(@files, [$fdr, $fil, $ft, 1]);
   my ($i, $cnt, $fdr, $fil, $typ, $ff, $sb, $act, $vers, $mver, $msg);
   my @arr = ();
   $cnt = scalar @files;
   for ($i = 0; $i < $cnt; $i++) {
      $fdr = $files[$i][0];
      $fil = $files[$i][1];
      $typ = $files[$i][2];
      $act = $files[$i][3];
      if ($act == 0) {
         next;
      }
      $ff = $fdr . '\\' . $fil;
      $sb = stat($ff);
      if (defined $sb) {
         open( IF, $ff ) or next;
         while (<IF>) {
            if ($_ =~ /.+Format\s+Version\s+(\d+\.\d+)$/i) {
               $vers = $1;   # get n.nn version
               @arr = split(/\./,$vers);
               $mver = $arr[0];
               ###prt( YYYYMMDD( $sb->mtime ). " $fil = Format Version $1 [$fdr]\n" );
               $msg = "$vers $fil ". YYYYMMDD( $sb->mtime ). " [$fdr]";
               if ( ver_count($mver) ) {
                  push(@others, $msg);
               }
               prt( "$msg\n" );
               last;
            }
         }
         close IF;
      } else {
         prt( "ERROR: Failed to stat [$ff] ... $! ...\n" );
      }
   }
}
################################################
# My particular time 'translation' - replaced date_string
sub YYYYMMDD {
   #  0    1    2     3     4    5     6     7     8
   my ($tm) = shift;
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($tm);
   $year += 1900;
   $mon += 1;
   my $ymd = "$year/";
   if ($mon < 10) {
      $ymd .= '0'.$mon.'/';
   } else {
      $ymd .= "$mon/";
   }
   if ($mday < 10) {
      $ymd .= '0'.$mday;
   } else {
      $ymd .= "$mday";
   }
   return $ymd;
}
sub is_my_files {
   my ($file) = shift;
   my @arr = split(/\./, $file);
   my $ext = lc($arr[-1]);
   prt( "Got ext=$ext from $file ...\n" ) if ($dbg1);
   if ($ext eq 'dsw') {
      return $typ1;
   } elsif ($ext eq 'dsp') {
      return $typ2;
   } elsif ($ext eq 'sln') {
      return $typ3;
   } elsif ($ext eq 'vcproj') {
      return $typ4;
   }
   return 0;
}
sub scandir {
   my ($fdr) = shift;
   prt( "Checking folder [$folder] ...\n" ) if ($dbg4);
   my ($dh, $ff, $fil, $ft);
   my $cnt = 0;
   my @dirs = ();
   if ( !opendir($dh, $fdr) ) {
      prt( "ERROR: Can NOT open directory [$fdr]!\n" );
      return;
   }
   while ($fil = readdir($dh)) {
      next if (($fil eq '.') || ($fil eq '..'));
      $ff = $fdr . '\\' . $fil; # get FULL PATH
      if ( -d $ff ) {
         prt( "Got directory [$ff] ...\n" ) if ($dbg2);
         push(@dirs, $ff);
      } else {
         $ft = is_my_files( $fil );
         if ($ft) {
            prt( "$fil is MSVC ...\n" ); # if ($dbg5);
            push(@files, [$fdr, $fil, $ft, 1]);
            $cnt++;
         } else {
            prt( "Discarding [$fil] ...\n" ) if ($dbg3);
         }
      }
   }
   closedir($dh);
   if ($cnt) {
      prt( "Found $cnt MSVC files ...\n" ) if ($dbg5);
   } else {
      prt( "Found NO MSVC files ...\n" ) if ($dbg4);
   }
   foreach $ff (@dirs) {
      scandir($ff);
   }
}
# eof - msvcvers.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional