#!/usr/bin/perl -w

#  Update the cPing program on Linux, Raspbian and OSX

# Executable
my $EXE  = '/usr/local/bin/cping';
my $REPO = 'https://www.prinmath.com/ham/repo/cping';
my $get  = "wget -q -O";
my $WGET = "$get $EXE $REPO";

#
#  Run program and get result
#
sub run
{
   my ($cmd) = @_;
   my $out = `$cmd`;
   $out && chomp $out;
   return $out ? $out : '';
}

#  Rest must be root as root
$< && die "$0 must be run as root (sudo $0)\n";

#  Update ourself
if (@ARGV>0 && $ARGV[0] eq '-u')
{
   my $exe = $0;
   system("$get $exe https://www.prinmath.com/ham/update-cping");
   system("chmod a+x $exe");
   die "$0 updated\n";
}

#  Get current version of cping
my $inst = run('cping -v 2>&1');
($inst) = (split(' ',$inst))[2];
my $repo = run("$get- $REPO.ver");
$inst && ($inst eq $repo) && die "cping version $inst is up to date\n";

#  OSX
if (run('uname') eq 'Darwin')
{
   system("$WGET.osx");
   system("chmod a+x $EXE");
   system("chown root $EXE");
   system("chmod u+s $EXE");
}
#  Linux
else
{
   #  rPi with piGPIO
   if (-e '/usr/lib/libpigpio.so')
   {
      system("$WGET.rpg");
   }
   # rPi 2 or 3
   elsif (run('uname -m') =~ /armv[67]l/)
   {
      system("$WGET.rpi");
   }
   # Other linux
   else
   {
      system("$WGET.lnx");
   }
   system("chmod a+x $EXE");
   system("setcap cap_net_raw,cap_sys_rawio,cap_dac_override=ep $EXE");
}
system('cping -v');
