#!/usr/bin/perl

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

my $SYSTEM_VERS = "$ARGV[0]"."/System/Library/CoreServices/SystemVersion.plist";
my $TARGET_VOLUME = "$ARGV[0]";
my $EXIT_VALUE = 0;

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

DO_CHECKS: {
    if( ! -e "$SYSTEM_VERS" ) {
        $EXIT_VALUE = (( 1 << 5 ) | 16 );
        last;
    }    

    if( CheckVersion("$SYSTEM_VERS", "10.3", "ProductVersion", "<" )) {
        $EXIT_VALUE = (( 1 << 5 ) | 17 );
        last;
    }
}

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;

     # ProductBuildVersion style keys
     $versiondata{$keyName} =~ /(\d+)([A-Z])(\d+)/ && ($versiondata{$keyName} = "$1.".ord($2).".$3");
     $version =~ /(\d+)([A-Z])(\d+)/ && ($version = "$1.".ord($2).".$3");

     @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;
     }

}