abi-generate 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/perl -w
  2. use PVE::Tools;
  3. use IO::File;
  4. sub usage {
  5. die "USAGE: $0 INFILE OUTFILE [ABI INFILE-IS-DEB]\n";
  6. }
  7. my $input_file = shift // usage();
  8. my $output_file = shift // usage();
  9. my $abi = shift;
  10. my $extract_deb = shift;
  11. die "input file '$input_file' does not exist\n" if ! -e $input_file;
  12. my $modules_symver_fh;
  13. if ($extract_deb) {
  14. usage() if !defined($abi);
  15. my $cmd = [];
  16. push @$cmd, ['dpkg', '--fsys-tarfile', $input_file];
  17. push @$cmd, ['tar', '-xOf', '-', "./usr/src/linux-headers-${abi}/Module.symvers"];
  18. $modules_symver_fh = IO::File->new_tmpfile();
  19. PVE::Tools::run_command($cmd, output => '>&'.fileno($modules_symver_fh));
  20. seek($modules_symver_fh, 0, 0);
  21. } else {
  22. open($modules_symver_fh, '<', $input_file) or die "can't open '$input_file' - $!\n";
  23. }
  24. my $lines = [];
  25. while(my $line = <$modules_symver_fh>) {
  26. if ($line =~ /^(.+)\s+(.+)\s+(.+)$/) {
  27. push @$lines, "$3 $2 $1";
  28. } else {
  29. warn "malformed symvers line: '$line'\n";
  30. }
  31. }
  32. close($modules_symver_fh);
  33. PVE::Tools::file_set_contents($output_file, join("\n", sort @$lines));