]> git.pld-linux.org Git - packages/kernel.git/blobdiff - kernel-module-build.pl
UP to 5.15.66
[packages/kernel.git] / kernel-module-build.pl
index 9155a8a585ef7431f641d1f50a50089e2ecbca60..1195beaefd9f55b44f5461d5db97add83aeefcfa 100644 (file)
@@ -6,33 +6,83 @@ use File::Find qw(find);
 
 my $rpmdir = shift @ARGV or die;
 my $fileoutdir = shift @ARGV or die;
-my @tosort;
 
-find(\&wanted, ".");
+# files which match: */include/*/Kbuild
+my @modulebuild_in_include;
+# files which match: */Kbuild */Kconfig except include
+my @modulebuild;
+# parent dirs of Kconfig files which match */include*
+my @dirs_in_include;
+# parent dirs of Kconfig files except include
+my @dirs;
 
-sub wanted {
+sub push_dirs
+{
+       my $list = shift;
+       my $dir = shift;
+       my $subdir = "";
+       foreach my $sub ( split( '/', $dir )) {
+               $subdir .= "/" . $sub;
+               push @$list, "\%dir $rpmdir$subdir\n";
+       }
+}
+
+sub wanted
+{
        return unless -f;
        return unless /^Kconfig/ or /^Makefile/ or /^Kbuild/;
        #return if /\.orig$/;
-       return if $File::Find::name =~ /(Documentation|scripts)/;
+       return if $File::Find::name =~ /Documentation/;
        (my $file = $File::Find::name) =~ s#^\./##;
        $file =~ m#^(.*)/#;
        my $dir = $1 || "";
-       my $subdir = "";
-       foreach my $sub ( split( '/', $dir )) {
-               $subdir .= "/" . $sub;
-               push @tosort, "\%dir $rpmdir$subdir\n";
+       if ( $dir =~ m{^(.*/)?include(/.*?)?$} ) {
+               push @modulebuild_in_include, "$rpmdir/$file\n";
+               push_dirs( \@dirs_in_include, $dir );
+       } else {
+               push @modulebuild, "$rpmdir/$file\n";
+               push_dirs( \@dirs, $dir );
+       }
+}
+
+find(\&wanted, ".");
+
+sub uniq
+{
+       my %hash = map { $_, 1 } @_;
+       return sort keys %hash;
+}
+
+sub remove
+{
+       my $from = shift;
+       my $what = shift;
+       my %hash = map { $_, 1 } @$from;
+       foreach ( @$what ) {
+               delete $hash{ $_ };
        }
-       push @tosort, "$rpmdir/$file\n";
+       return sort keys %hash;
 }
 
-my $last = "";
-my @toprint = grep {if ($_ ne $last) { $last = $_; 1} else {0}} sort @tosort;
+# to module-build add all Kconfig, Makefile and Kbuild files
+# also add all their parent dirs if they aren't parents of some include directory
+open F_OUT, "> $fileoutdir/files.mb_include_modulebuild_and_dirs"
+       or die "Can't create files.mb_include_modulebuild_and_dirs: $!\n";
+print F_OUT remove( \@dirs, \@dirs_in_include );
+print F_OUT uniq( @modulebuild_in_include, @modulebuild );
+close F_OUT and print "files.mb_include_modulebuild_and_dirs created\n";
 
-open F_OUT, "> $fileoutdir/aux_files" or die "Can't create aux_files: $!\n";
-print F_OUT @toprint;
-close F_OUT and print "aux_files created\n";
+# from source remove all files Kconfig, Makefile and Kbuild files
+# also remove all their parent dirs
+open F_OUT, "> $fileoutdir/files.source_exclude_modulebuild_and_dirs"
+       or die "Can't create files.source_exclude_modulebuild_and_dirs: $!\n";
+print F_OUT map {"\%exclude $_"} uniq( @modulebuild_in_include, @modulebuild,
+       @dirs_in_include, @dirs );
+close F_OUT and print "files.source_exclude_modulebuild_and_dirs created\n";
 
-open F_OUT, "> $fileoutdir/aux_files_exc" or die "Can't create aux_files_exc: $!\n";
-print F_OUT map {"\%exclude $_"} @toprint;
-close F_OUT and print "aux_files_exc created\n";
+# from headers remove all Kconfig, Makefile and Kbuild files that are
+# part of include directory
+open F_OUT, "> $fileoutdir/files.headers_exclude_kbuild"
+       or die "Can't create files.headers_exclude_kbuild: $!\n";
+print F_OUT map {"\%exclude $_"} uniq( @modulebuild_in_include );
+close F_OUT and print "files.headers_exclude_kbuild created\n";
This page took 0.046025 seconds and 4 git commands to generate.