]> git.pld-linux.org Git - projects/cleanbuild.git/blobdiff - findbr
findbr: check errors from mkmf.log as well
[projects/cleanbuild.git] / findbr
diff --git a/findbr b/findbr
index e32557d59e17d15d797bcdf9e2b72e675f3c1c3b..9e2c930a36b67e261c6d7771204dad3f4bebd08f 100755 (executable)
--- a/findbr
+++ b/findbr
@@ -4,14 +4,24 @@ use strict;
 use warnings;
 use IPC::Open2;
 use Cwd;
+use constant DOCKER => -e '/.dockerenv';
 
 my $pwd = getcwd();
 # how to run poldek
 my @ignore = qw(vserver-packages python-devel-src);
-my @poldek = (qw(sudo poldek -n th-x86_64-ready), "--cachedir=$pwd/poldekcache",
-       "--skip-installed", "--conf=$pwd/poldekconf/poldek.conf",
+my @poldek;
+if (DOCKER) {
+       push(@poldek, qw[poldek]);
+} else {
+       push(@poldek, qw[sudo poldek -n th-x86_64-ready],
+               "--cachedir=$pwd/poldekcache",
+               "--conf=$pwd/poldekconf/poldek.conf",
+       );
+}
+push(@poldek, (
+       "--skip-installed",
        "-O", "ignore=" . (join " ", @ignore)
-);
+));
 
 # if multiple packages provide some funcionality those will be selected:
 my %preferred = (
@@ -55,7 +65,7 @@ my %skip;
 # for m4 in *.m4; do R=$(rpm -qf $m4); R=${R%-*-*}; \
 #   awk -vr=$R '/^\s*(AC_DEFUN|AU_ALIAS)/ { gsub(/\].*/,""); gsub(/.*\[/,""); print r " " $0}' $m4; \
 # done | sort | awk '{print "\t\"" $2 "\" => \"" $1 "\","}'
-my %ac2br = do "findbr-ac2br";
+my %ac2br = do (DOCKER ? './cleanbuild/findbr-ac2br' : './findbr-ac2br');
 
 my %cmake2br = (
        "findkde4:44" => "kde4-kdelibs",
@@ -101,18 +111,20 @@ sub add_br
 sub poldek_cmd
 {
        my $cmd = shift;
+
        warn "Poldek: $cmd\n";
-       my $pid = open( READ, "-|", @poldek, "--shcmd=".$cmd );
 
-       my @read = <READ>;
-       close READ;
+       my @cmd = (@poldek, "--shcmd=".$cmd);
+       open my $fh, '-|', @cmd or die "$!: @cmd";
+       my @read = <$fh>;
+       close $fh or die $!;
 
-       return @read if wantarray;
-       return \@read;
+       return wantarray ? @read : \@read;
 }
 
 my $check_ac = 0;
 my $check_config_log = undef;
+my $check_mkmf_log = undef;
 
 my %checked_files;
 sub poldek_file
@@ -216,11 +228,18 @@ start_check:
 my %checked;
 my $cmake_get_call = 0;
 my $cmake_pkg_list = 0;
+my $py_ver = undef;
 while ( $_ = shift @lines ) {
        chomp;
        #next if $checked{ $_ };
        #$checked{ $_ } = 1;
 
+       # try to extract current python version from setup.py run
+       if (m{^copying .+ -> build-(\d+)/lib/}) {
+               $py_ver = $1;
+               warn "py_ver set to '$py_ver'\n";
+       }
+
        $reason = $_;
        if ( /^\S+: (\S+): (?:Command )?not found$/ or /.*configure\[\d+\]: (\S+): not found$/
                        or m{which: no (\S+) in \(.*/bin.*\)}
@@ -251,18 +270,26 @@ while ( $_ = shift @lines ) {
                or m{^ERROR: Cannot find .+: No module named (\S+)$}
                or m{^ERROR: Failed to import the ".+" module: No module named (\S+)$}
                or m{^distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse\('([^'>=]+).*'\)}
+               or                           m{^error: Could not find suitable distribution for Requirement.parse\('([^'>=]+).*'\)}
                or m{^Couldn't find index page for '(\S+)'}
                ) {
                my $mod = $1;
                $mod =~ s#\.#/#g;
-               warn "Looking for python module $mod\n";
+               warn "Looking for Python$py_ver module $mod\n";
                poldek_file(
-                               "/usr/share/python2*/$mod/__init__.py*",
-                               "/usr/share/python2*/$mod.py*",
-                               "/usr/lib*/python2*/$mod/__init__.py*",
-                               "/usr/lib*/python2*/$mod.py*",
-                               "/usr/lib*/python2*/_$mod.so",
-                               "/usr/lib*/python2*/$mod.so" );
+                               "/usr/share/python$py_ver*/site-packages/$mod/__init__.py*",
+                               "/usr/share/python$py_ver*/$mod/__init__.py*",
+                               "/usr/share/python$py_ver*/site-packages/$mod.py*",
+                               "/usr/share/python$py_ver*/$mod.py*",
+                               "/usr/lib*/python$py_ver*/site-packages/$mod/__init__.py*",
+                               "/usr/lib*/python$py_ver*/$mod/__init__.py*",
+                               "/usr/lib*/python$py_ver*/site-packages/$mod.py*",
+                               "/usr/lib*/python$py_ver*/$mod.py*",
+                               "/usr/lib*/python$py_ver*/site-packages/_$mod.so",
+                               "/usr/lib*/python$py_ver*/_$mod.so",
+                               "/usr/lib*/python$py_ver*/site-packages/$mod.so",
+                               "/usr/lib*/python$py_ver*/$mod.so",
+               );
        }
 
        if (
@@ -431,6 +458,9 @@ while ( $_ = shift @lines ) {
                warn "Looking for docbook file $db\n";
                poldek_file( "/usr/share/sgml/*/$db" );
        }
+       if (m{Could not find HTML docbook.xsl}) {
+               add_br("docbook-style-xsl");
+       }
 
        if ( m{LaTeX Error: File `(\S+)' not found} ) {
                my $tex = $1;
@@ -449,6 +479,9 @@ while ( $_ = shift @lines ) {
        if ( m{configure: error: C\+\+ compiler cannot create executables} ) {
                add_br( "libstdc++-devel", "maybe try: %undefine\t__cxx" );
        }
+       if ( m{ccache: error: Could not find compiler ".+-g\+\+" in PATH}) {
+               add_br("libstdc++-devel");
+       }
        if ( m{configure: error: XML::Parser perl module is required for intltool} ) {
                add_br( "perl-XML-Parser" );
        }
@@ -483,6 +516,10 @@ while ( $_ = shift @lines ) {
                $check_config_log = 1 unless defined $check_config_log;
        }
 
+       if ( m{Check the mkmf.log file for more details} ) {
+               $check_mkmf_log = 1 unless defined $check_mkmf_log;
+       }
+
        if ( m{^CMake (?:Error|Warning) at (?:\S+/)?(\S+?)\.cmake:(\d+) } ) {
                my ( $module, $line ) = ( lc $1, $2 );
                my $br;
@@ -640,11 +677,19 @@ while ( $_ = shift @lines ) {
                        poldek_file( "/usr/bin/$exec", "/bin/$exec" );
                }
        }
+
+
+       if (
+               m{Could not find (\S+)}
+       ) {
+               my $exec = $1;
+               poldek_file("/usr/bin/$exec", "/bin/$exec" );
+       }
 }
 
 
 
-sub wanted
+sub find_configure
 {
        return unless /^configure(\.(?:ac|in|in\.in))?$/;
        return unless -r;
@@ -668,10 +713,10 @@ sub wanted
 
 use File::Find;
 if ( $check_ac ) {
-       find( \&wanted, $builddir );
+       find( \&find_configure, $builddir );
 }
 
-sub wanted2
+sub find_config_log
 {
        return unless /^config\.log$/;
        return unless -r;
@@ -684,7 +729,21 @@ sub wanted2
 
 if ( $check_config_log ) {
        $check_config_log = 0;
-       find( \&wanted2, $builddir );
+       find( \&find_config_log, $builddir );
+       goto start_check if @lines;
+}
+
+if ($check_mkmf_log) {
+       $check_mkmf_log = 0;
+       find(sub {
+               return unless /^mkmf\.log$/;
+               return unless -r;
+
+               warn "$File::Find::name\n";
+               open F_IN, "<", $_;
+               push @lines, <F_IN>;
+               close F_IN;
+       }, $builddir);
        goto start_check if @lines;
 }
 
This page took 0.047091 seconds and 4 git commands to generate.