|
Michal Marek |
411abb |
#!/usr/bin/perl
|
|
Michal Marek |
411abb |
|
|
Shung-Hsi Yu |
4161bf |
use File::Spec;
|
|
Michal Marek |
411abb |
use Getopt::Long;
|
|
Michal Marek |
411abb |
use strict;
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
&main();
|
|
Michal Marek |
411abb |
sub main
|
|
Michal Marek |
411abb |
{
|
|
Michal Marek |
411abb |
my($dev_output, $ndev_output, $loc) = ("-", "-", ".");
|
|
Michal Marek |
411abb |
&Getopt::Long::Configure(qw(bundling));
|
|
Michal Marek |
411abb |
&GetOptions(
|
|
Michal Marek |
411abb |
"D=s" => \$dev_output,
|
|
Michal Marek |
411abb |
"N=s" => \$ndev_output,
|
|
Michal Marek |
411abb |
"L=s" => \$loc,
|
|
Michal Marek |
411abb |
);
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
my($dev, $ndev) = &scan($loc);
|
|
Michal Marek |
411abb |
&output($dev, $ndev, $dev_output, $ndev_output);
|
|
Michal Marek |
411abb |
}
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
sub scan
|
|
Michal Marek |
411abb |
{
|
|
Shung-Hsi Yu |
4161bf |
# Normalize file path, mainly to strip away the ending forward slash,
|
|
Shung-Hsi Yu |
4161bf |
# or any double forward slashes.
|
|
Shung-Hsi Yu |
4161bf |
my $loc = File::Spec->canonpath(shift @_);
|
|
Shung-Hsi Yu |
4161bf |
# We cannot use an absolute path (e.g. /usr/src/linux-5.14.21-150500.41)
|
|
Shung-Hsi Yu |
4161bf |
# during find because it's under build root, but rpm wants one later.
|
|
Shung-Hsi Yu |
4161bf |
my $abs_loc = rpm_path($loc);
|
|
Michal Marek |
411abb |
my(@dev, @ndev);
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
foreach $_ (`find "$loc"`)
|
|
Michal Marek |
411abb |
{
|
|
Michal Marek |
411abb |
chomp $_;
|
|
Andreas Schwab |
af248e |
if (-d $_ && !-l $_) {
|
|
Michal Marek |
411abb |
# Generate directory list later.
|
|
Michal Marek |
411abb |
next;
|
|
Michal Marek |
411abb |
}
|
|
Michal Marek |
411abb |
my $is_devel =
|
|
Michal Marek |
411abb |
m{^\Q$loc\E.*/Kconfig} ||
|
|
Michal Marek |
411abb |
m{^\Q$loc\E.*/Kbuild} ||
|
|
Michal Marek |
411abb |
m{^\Q$loc\E.*/Makefile} ||
|
|
Andreas Schwab |
af248e |
m{^\Q$loc\E/arch/[^/]+/boot/dts/include/dt-bindings\b} ||
|
|
Michal Marek |
411abb |
m{^\Q$loc\E/arch/[^/]+/include\b} ||
|
|
Andreas Schwab |
ec6d35 |
m{^\Q$loc\E/arch/.*/module\.lds\b} ||
|
|
|
882120 |
m{^\Q$loc\E/arch/arm/[^/]+/include/mach\b} ||
|
|
|
882120 |
m{^\Q$loc\E/arch/arm/[^/]+/include/plat\b} ||
|
|
Andreas Schwab |
aa3277 |
m{^\Q$loc\E/arch/[^/]+/scripts\b} ||
|
|
Markos Chandras |
5f1ff5 |
m{^\Q$loc\E/arch/[^/]+/tools\b} ||
|
|
Michal Marek |
411abb |
m{^\Q$loc\E/include/[^/]+\b} ||
|
|
Michal Marek |
411abb |
m{^\Q$loc\E/scripts\b};
|
|
Shung-Hsi Yu |
4161bf |
my $abs_path = rpm_path($_);
|
|
Shung-Hsi Yu |
4161bf |
$is_devel ? push(@dev, $abs_path) : push(@ndev, $abs_path);
|
|
Michal Marek |
411abb |
}
|
|
Michal Marek |
411abb |
|
|
Shung-Hsi Yu |
4161bf |
push(@dev, &calc_dirs($abs_loc, \@dev));
|
|
Shung-Hsi Yu |
4161bf |
push(@ndev, &calc_dirs($abs_loc, \@ndev));
|
|
Michal Marek |
411abb |
return (\@dev, \@ndev);
|
|
Michal Marek |
411abb |
}
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
sub calc_dirs
|
|
Michal Marek |
411abb |
{
|
|
Michal Marek |
411abb |
my($base, $files) = @_;
|
|
Michal Marek |
411abb |
my %dirs;
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
foreach my $file (@$files) {
|
|
Shung-Hsi Yu |
4161bf |
my ($volume,$path,$basename) = File::Spec->splitpath($file);
|
|
Shung-Hsi Yu |
4161bf |
my @dirs = File::Spec->splitdir($path);
|
|
Michal Marek |
411abb |
do {
|
|
Shung-Hsi Yu |
4161bf |
# Always create $path from catdir() to avoid ending forward slash
|
|
Shung-Hsi Yu |
4161bf |
$path = File::Spec->catdir(@dirs);
|
|
Michal Marek |
411abb |
$dirs{$path} = 1;
|
|
Shung-Hsi Yu |
4161bf |
pop @dirs;
|
|
Shung-Hsi Yu |
4161bf |
} while ($path ne $base);
|
|
Michal Marek |
411abb |
# This loop also makes sure that $base itself is included.
|
|
Michal Marek |
411abb |
}
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
return map { "\%dir $_" } keys %dirs;
|
|
Michal Marek |
411abb |
}
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
sub output
|
|
Michal Marek |
411abb |
{
|
|
Michal Marek |
411abb |
my($dev, $ndev, $dev_out, $ndev_out) = @_;
|
|
Michal Marek |
411abb |
local *FH;
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
open(FH, "> $dev_out") || warn "Error writing to $dev_out: $!";
|
|
Michal Marek |
411abb |
print FH join("\n", @$dev), "\n";
|
|
Michal Marek |
411abb |
close FH;
|
|
Michal Marek |
411abb |
|
|
Michal Marek |
411abb |
open(FH, "> $ndev_out") || warn "Error writing to $ndev_out: $!";
|
|
Michal Marek |
411abb |
print FH join("\n", @$ndev), "\n";
|
|
Michal Marek |
411abb |
close FH;
|
|
Michal Marek |
411abb |
}
|
|
Shung-Hsi Yu |
4161bf |
|
|
Shung-Hsi Yu |
4161bf |
sub rpm_path
|
|
Shung-Hsi Yu |
4161bf |
{
|
|
Shung-Hsi Yu |
4161bf |
my $path = shift @_;
|
|
Shung-Hsi Yu |
4161bf |
# Always prepend forward slash and let canonpath take care of
|
|
Shung-Hsi Yu |
4161bf |
# duplicate forward slashes.
|
|
Shung-Hsi Yu |
4161bf |
return File::Spec->canonpath("/$path");
|
|
Shung-Hsi Yu |
4161bf |
}
|