#!/usr/bin/perl

my $SYSVERS = "$ARGV[3]"."/System/Library/CoreServices/SystemVersion.plist";
my $TARGET  = "$ARGV[3]";
my $PKG_RESOURCES = "\Q$ARGV[0]";

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

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

}


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

my $runnerPID = getppid();
my $installerPID = "";
my $uid = "";
my $uname = "";

open( PSOUT, "/bin/ps -axww -o pid,ppid -p $runnerPID |" );
while( <PSOUT> ) {
	my @fields = split '\s+', $_;
	if ("$fields[1]" eq "$runnerPID") {
		$installerPID = $fields[2];
	}
}
close( PSOUT );

if ("$installerPID" ne "") {
	open( PSOUT, "/bin/ps -axww -o pid,ruid -p $installerPID |" );
	while( <PSOUT> ) {
		my @fields = split '\s+', $_;
		if ("$fields[1]" eq "$installerPID") {
			$uid = $fields[2];
		}
	}
	close( PSOUT );
}

if ("$uid" ne "") {
	open( PSOUTA, "/usr/bin/id -p $uid |" );
	while( <PSOUTA> ) {
		my @fields = split '\s+', $_;
		if ("$fields[0]" eq "uid") {
			$uname = $fields[1];
		}
	}
	close( PSOUTA );
}

if ("$ENV{COMMAND_LINE_INSTALL}" ne "1" && "$ENV{SOFTWARE_UPDATE}" ne "YES") {
	my $ALERT_APP = "$PKG_RESOURCES" . "/Contents/Resources/QT6Installer.app/Contents/MacOS/QT6Installer";
	my $EXIT_VALUE = 0;
	
	my $cmd = "$ALERT_APP";
	if ("$uname" ne "") {
		$cmd = "sudo -u $uname $ALERT_APP";
	} 

	$EXIT_VALUE = system("$cmd");
	
	if (($EXIT_VALUE >> 8) != 0) {
		if ("$installerPID" ne "") {
			kill "QUIT", $installerPID;
		}
		kill "QUIT", $runnerPID;
		exit($EXIT_VALUE >> 8);
	}
}

########

# on Leopard systems, disable crash reporter (<rdar://problem/5683081>)
if ((CheckVersion("$SYSVERS", "10.5", "ProductVersion", ">=")) && ("$ARGV[3]" eq "/")) {
  system("/bin/launchctl unload \"/System/Library/LaunchDaemons/com.apple.ReportCrash.plist\"");
}

########
########################################################
# run deletomatic to get rid of obsolete files <rdar://problem/6954050> QT7.6.2: not properly codesigned
my $Delete = "$PKG_RESOURCES" . "/Contents/Resources/deleteomatic";
my $DELETED_FILES="$PKG_RESOURCES" . "/Contents/Resources/cleanup-list";
system ("$Delete \"$ARGV[2]\" $DELETED_FILES"); 

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

