#!/usr/bin/perl
# 2003.2.17.1.bc
# This file does not get run during Software Update.

########################################################
my $EXIT_VALUE 		= 0;
my $SYSVERS 		= "$ARGV[0]/System/Library/CoreServices/SystemVersion.plist";
my $APP			= "$ARGV[0]/Applications/iMovie.app";
my $APPEXEC		= "$APP/Contents/MacOS/iMovie";
my $APPVERS		= "$APP/Contents/version.plist";
########################################################

DO_CHECKS: 
{
    # Target disk must contain a 10.1.5 or higher system
    if(! -e $SYSVERS || CheckVersion("$SYSVERS", "10.1.5", "ProductVersion", "<" )) 
    {
            $EXIT_VALUE = ((1 << 5) | 16);
    }
    
    # Check for any iMovie on Target Disk
    if(!-f "$APPEXEC")
    {
            $EXIT_VALUE = (( 1 << 5 ) | 17);
            last;
    }
        
    # Check for iMovie >=3.0, < 3.0.3 there
    if(! -e $APPVERS || 
            CheckVersion("$APPVERS", "3.0.0", "CFBundleVersion", "<" ) || 
            CheckVersion("$APPVERS", "3.0.3", "CFBundleVersion", ">" )) 
    {
            $EXIT_VALUE = ((1 << 5) | 17);
    }
}

exit($EXIT_VALUE);

########################################################

sub CheckVersion
{
    my $path            = $_[0];
    my $version         = $_[1];
    my $keyName         = $_[2];
    my $operator        = $_[3];

    if (! -e $path) {
        return 0;
    }

    if (!$operator) {
        $operator = "==";
    }

    my $oldSeperator = $/;
    $/ = \0;

    open( PLIST, "$path") || do {
        return 0;
    };

    $plistData = <PLIST>;
    $plistData =~ /<dict>(.*?)<\/dict>/gis;

    @items = split(/<key>/, $plistData);

    shift @items;
    foreach $item (@items) {
        $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
        $versiondata{ $1 } = $2;
    }

    close(PLIST);

    $/ = $oldSeperator;

    @theVersionArray = split(/\./, $versiondata{$keyName});
    for ($i = 0; $i < 3; $i++) {
        if(!$theVersionArray[$i]) {
            $theVersionArray[$i] = '0';
        }
    }

    @versionArray = split(/\./, $version);
    
    my $actualVersion;

    for ($i = 0; $i < 3; $i++) {
        if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {

            $actualVersion = $theVersionArray[$i];
            $version = $versionArray[$i];

            last;
        }
    }

    my $expression = '$actualVersion ' . $operator . ' $version';
    if( eval ($expression) )
    {
        return 1;
    }
    else
    {
        return 0;
    }

}

