#!/usr/bin/perl

$md5=shift;
$move=shift;

@extrabon=qw(
java
jdk
jre
jdk-src
jdk-docs
apache-ant
duktape
u-boot-tools
mtd-utils
vboot-utils
watchdog
klettres
ktuberling
dtc
nbd
x11vnc
icedtea-web
libcroco
pyserial
xr819-firmware
perl-mod_perl
perl-DBD-SQLite
perl-Text-Iconv
silo

#15.0_packages:
cbindgen
nodejs

#15.0_ppc:
llvm9

#x86_specific_packages:
isapnptools
kernel-generic-smp
kernel-huge-smp
kernel-modules-smp
btmgr
dip
libpng14
xf86-video-geode

#current_update:
#llvm13lib
#llvm14lib

#kernel_modules_still_to_update_to_new_all-in-one package:
kernel-modules

#want_to_keep_reiserfsprogs:
reiserfsprogs

#mips/mipsel_still_have_mozj128:
mozjs128

#keep_kdewebkit_for_compatibility_without_qtwebkit:
#qt5-webkit_kdewebkit
);

foreach(@extrabon) { $extrabon{$_}=1; }

sub pkgbase {
  my $pkg=shift;
  my $i;
  if(($i=rindex($pkg,"/"))>=0) {
    $pkg=substr($pkg,$i+1);
  }
  $pkg=~s/\.t[gblx][tz]$//;
  return($pkg);
}

sub package_name {
  my $pkg=shift;
  my $pkgn;
  $_=pkgbase($pkg);
  ($pkgn)=m/(.+)-.+?-.+?-.+?/;
  if(length($pkgn)==0) { $pkgn=$_; }
  return($pkgn);
}


if(!-f $md5) {
  # Check if it a symlink
  print "ERROR: you must provide MD5 file\n";
  exit 1;
}

%pkgs=();
$count=0;
if(open(F,$md5))
{
  while(<F>) {
    chop;
    if(m/t.z$/) {
      $pkgs{package_name($_)}++;
      $count++;
    }
  }
  close(F);
}

if($count<1000) {
  print "SOMETHING wrong: find only $count packages in MD5 file. Please check.\n";
  exit 2;
}

if(-d "xap") {
  $system=0;
  if(!open(F,"find . -name '*.txz' | grep -vE 'old_packages|^\\./temp'|"))
  {
    print "Cannot get package list ($!): please check\n";
    exit(3);
  }
}
else {
  $system=1;
  if(!open(F,"\\ls -rt /var/log/packages/|"))
  {
    print "Cannot get package list from /var/log/packages/ ($!): please check\n";
    exit(3);
  }
}

while(<F>) {
  chop;
  if(1) {
    $fullfile=$_;
    $pkg=package_name($_);
    if(!defined($extrabon{$pkg}) && !defined($pkgs{$pkg})) {
	if($system) {
	  print "$pkg\n";
        }
	else {
	  print "$fullfile\n";
	}
    }
  }
}
close(F);
