#!/usr/bin/perl

sub error {
  print STDERR "ERROR: @_\n";
  die;
}

sub verbose {
  if ($verbose) {print STDERR "$_[0]\n"}
}

sub dosystem {
  my ($package,$filename,$line) = caller;
  &verbose("exec: $_[0]");
  system($_[0]) and &error("Command failed!!! at $package, $filename, $line : $_[0]\nHINT : $_[1]");
}

sub docopy {
  &verbose("copying: $_[0] $_[1]");
  (-r $_[0]) or &error("$_[0] not readable"); 
  copy(@_) or &error("unable to copy $_[0] to $_[1]");
}


sub is_installed {
  my $package=$_[0];
  unless (system("dpkg -s $package 2>/dev/null | grep  Status | grep -q Status.*install.*ok.*installed")){
    &verbose("$package is installed");
    return 1;
  }
  &verbose("$package is not installed");
  return undef;
}

sub copy_deb_content {
  my $package=$_[0];
  my $dest=$_[1];
  &is_installed($package) || &error("$package not installed");
  &is_installed("dpkg-repack") || &error("please install dpkg-repack");
  &is_installed("fakeroot") || &error("please install fakeroot");
  dosystem("mkdir -p /tmp/replicator");
  dosystem("cd /tmp/replicator && fakeroot dpkg-repack $package");
  $endopt="";
  unless ($verbose) {$endopt=">/dev/null 2>&1"}
  dosystem("dpkg --root=$dest  --unpack --force-depends --force-auto-select /tmp/replicator/$package*deb $ $endopt");
}


$verbose=1;
&copy_deb_content("cfengine","/tmp");
