#!/usr/bin/perl -w

# set TRICK_SOURCE_CM_DIR and TRICK_SOURCE_WORK dir
# to the CM and work dir respectively.
# This script will run under 5.00x but the results
# are not reliable.  Under perl 5.6.0 it works well.

use strict;
use File::Find;
use Cwd;

my $cwd = cwd() ;

# bm_build and bm_or taken from www.perl.com 
sub _bm_build {
    my $condition = shift;
    my @regexp = @_;  # this MUST not be local(); need my()
    my $expr = join $condition => map { "m/\$regexp[$_]/o" } (0..$#regexp);
    my $match_func = eval "sub { $expr }";
    die if $@;  # propagate $@; this shouldn't happen!
    return $match_func;
}
sub bm_or  { _bm_build('||', @_) }

my $ignore = bm_or qw{ io_src xml(/|$) SCCS catalog \.\.\. \/object \.bak$ 
 bin_ lib_ \.[oa]$ \.clex$ [Mm]akefile \.checksums } ;

unlink "$cwd/.checksums" if ( -e "$cwd/.checksums" ) ;

find(\&all_files, '.');

sub all_files {
    my $curr_name = $_ ;
    my $name = $File::Find::name ;
    if ( $name ne "." ) {
        $_ = $name ;
        return if ( &$ignore ) ;
        if ( -f $curr_name ) {
            if ( $^O eq "linux" ) {
                system "cd $cwd ; /usr/bin/sum -s $name >> $cwd/.checksums" ;
            }
            elsif ( $^O eq "darwin" ) {
                system "cd $cwd ; /usr/bin/cksum -o 2 $name >> $cwd/.checksums" ;
            }
            else {
                system "cd $cwd ; /usr/bin/sum $name >> $cwd/.checksums" ;
            }
        }
    }
}


