#! /usr/bin/perl

$modules_dir = "modules";
$fw_list = "/tmp/module_firmware";

$kv = shift;
$fw_dir = shift;

$err = 0;

for $m (<$modules_dir/*.ko{,.xz,.zst}>) {
  chomp $m;

  chomp(@l = `modinfo -F firmware $m`);

  $m =~ s#.*/##;
  $m =~ s#\.ko(?:\.xz|\.zst)?$##;

  $fw{$m} = [ @l ] if @l;
}

open F, ">$fw_list";
print F "$_: ", join(' ', @{$fw{$_}}), "\n" for (sort keys %fw);
close F;

for $m (sort keys %fw) {
  for $fw (@{$fw{$m}}) {
    my $ok = 0;
    for my $f (<$fw_dir/$fw $fw_dir/$kv/$fw>) {
      if(-r $f) {
        $f =~ s#^$fw_dir/##;
        system "install -m 644 -D '$fw_dir/$f' 'lib/firmware/$f'\n";
        $ok = 1;
      }
    }
    print "missing firmware: $fw ($m.ko)\n" if !$ok;
  }
}

exit $err;

