#!/usr/bin/perl -w

use PVE::Tools;

use IO::File;

sub usage {
    die "USAGE: $0 INFILE OUTFILE [ABI INFILE-IS-DEB]\n";
}

my $input_file = shift // usage();
my $output_file = shift // usage();
my $abi = shift;
my $extract_deb = shift;

die "input file '$input_file' does not exist\n" if ! -e $input_file;

my $modules_symver_fh;

if ($extract_deb) {
	usage() if !defined($abi);
	my $cmd = [];
	push @$cmd, ['dpkg', '--fsys-tarfile', $input_file];
	push @$cmd, ['tar', '-xOf', '-', "./usr/src/linux-headers-${abi}/Module.symvers"];
	$modules_symver_fh = IO::File->new_tmpfile();
	PVE::Tools::run_command($cmd, output => '>&'.fileno($modules_symver_fh));
	seek($modules_symver_fh, 0, 0);
} else {
	open($modules_symver_fh, '<', $input_file) or die "can't open '$input_file' - $!\n";
}

my $lines = [];
while(my $line = <$modules_symver_fh>) {
	if ($line =~ /^(.+)\s+(.+)\s+(.+)$/) {
		push @$lines, "$3 $2 $1";
	} else {
		warn "malformed symvers line: '$line'\n";
	}
}
close($modules_symver_fh);

PVE::Tools::file_set_contents($output_file, join("\n", sort @$lines));