MULTICREATE_DEBUG + TRACE_PROFILE=console_monochrome results in >4MB log
[dbsrgits/DBIx-Class-Historic.git] / maint / travis-ci_scripts / 30_before_script.bash
index d23b6cd..44218a6 100755 (executable)
@@ -31,9 +31,6 @@ if [[ "$CLEANTEST" = "true" ]]; then
 
   mv ~/.cpanm/latest-build/DBIx-Class-*/inc .
 
-  # older perls do not have a CPAN which understands configure_requires
-  # properly and what is worse a `cpan Foo` run exits with 0 even if some
-  # modules failed to install
   # The first CPAN which is somewhat sane is around 1.94_56 (perl 5.12)
   # The problem is that the first sane version also brings a *lot* of
   # deps with it, notably things like YAML and HTTP::Tiny
@@ -41,38 +38,10 @@ if [[ "$CLEANTEST" = "true" ]]; then
   # possible, mainly to catch "but X is perl core" mistakes
   # So instead we still use our stock (possibly old) CPAN, and add some
   # handholding
-  if ! CPAN_is_sane ; then
-    for m in \
-ExtUtils::MakeMaker \
-ExtUtils::CBuilder \
-R/RS/RSAVAGE/Tree-DAG_Node-1.13.tgz \
-Module::Build \
-E/ET/ETHER/Class-Method-Modifiers-2.04.tar.gz \
-; do
-      run_or_err "Pre-installing $m" "cpan $m"
-      if ! perl -e '
-
-eval ( q{require } . (
-  $ARGV[0] =~ m{ \/ .*? ([^\/]+) $ }x
-    ? do { my @p = split (/\-/, $1); pop @p; join "::", @p }
-    : $ARGV[0]
-) ) or ( print $@ and exit 1)' "$m" 2> /dev/null ; then
-
-        echo_err -e "$m installation failed\n$LASTOUT"
-        exit 1
-      fi
-    done
-  fi
 
-
-  # DBI has by far the longest test runtime - run less tests
-  # FIXME horrible horrible hack, need to implement in DBI itself
-  run_or_err "Downloading latest DBI distdir from CPAN" \
-    "SHELL=/bin/true cpanm --look DBI"
-  cd ~/.cpanm/latest-build/DBI-*/
-  perl -p -i -e 's/(create_.+?_tests) => 1/$1 => 0/' Makefile.PL
-  run_or_err "Pre-installing DBI, but running less tests" "perl Makefile.PL && make && make test && make install"
-  cd - &>/dev/null
+  # no configure_requires - we will need the usual suspects anyway
+  # without pre-installign these in one pass things like extract_prereqs won't work
+  CPAN_is_sane || installdeps ExtUtils::MakeMaker ExtUtils::CBuilder Module::Build
 
 else
   # we will be running all dbic tests - preinstall lots of stuff, run basic tests
@@ -117,30 +86,67 @@ if [[ "$CLEANTEST" = "true" ]]; then
   HARD_DEPS="$(echo $(make listdeps))"
 
 ##### TEMPORARY WORKAROUNDS
+  if ! CPAN_is_sane ; then
+    # combat dzillirium on harness-wide level, otherwise breakage happens weekly
+    echo_err "$(tstamp) Ancient CPAN.pm: engaging TAP::Harness::IgnoreNonessentialDzilAutogeneratedTests during dep install"
+    perl -MTAP::Harness=3.18 -e1 &>/dev/null || run_or_err "Upgrading TAP::Harness for HARNESS_SUBCLASS support" "cpan TAP::Harness"
+    export PERL5LIB="$(pwd)/maint/travis-ci_scripts/lib:$PERL5LIB"
+    export HARNESS_SUBCLASS="TAP::Harness::IgnoreNonessentialDzilAutogeneratedTests"
+    # sanity check, T::H does not report sensible errors when the subclass fails to load
+    perl -MTAP::Harness::IgnoreNonessentialDzilAutogeneratedTests -e1
+
+    # DBD::SQLite reasonably wants DBI at config time
+    HARD_DEPS="DBI $HARD_DEPS"
+
+    # FIXME
+    # parent is temporary due to Carp https://rt.cpan.org/Ticket/Display.html?id=88494
+    HARD_DEPS="parent $HARD_DEPS"
+
+    if CPAN_supports_BUILDPL ; then
+      # We will invoke a posibly MBT based BUILD-file, but we do not support
+      # configure requires. So we not only need to install MBT but its prereqs
+      # FIXME This is madness
+      HARD_DEPS="$(extract_prereqs Module::Build::Tiny) Module::Build::Tiny $HARD_DEPS"
+    else
+      # FIXME
+      # work around Params::Validate not having a Makefile.PL so really old
+      # toolchains can not figure out what the prereqs are ;(
+      # Need to do more research before filing a bug requesting Makefile inclusion
+      HARD_DEPS="$(extract_prereqs Params::Validate) $HARD_DEPS"
+    fi
+  fi
+##### END TEMPORARY WORKAROUNDS
 
-  # work around Params::Validate not having a Makefile.PL so really old
-  # toolchains can not figure out what the prereqs are ;(
-  # Need to do more research before filing a bug requesting Makefile inclusion
-  perl -M5.008008 -e 1 &> /dev/null || \
-    HARD_DEPS="$(extract_prereqs Params::Validate) $HARD_DEPS"
+  installdeps $HARD_DEPS
 
-##### END TEMPORARY WORKAROUNDS
+### FIXME in case we set it earlier in a workaround
+  if [[ -n "$HARNESS_SUBCLASS" ]] ; then
 
-  run_or_err "Installing/testing dependencies (may take up to 3 minutes): $HARD_DEPS" "cpan $HARD_DEPS"
+    INSTALLDEPS_SKIPPED_TESTLIST=$(perl -0777 -e '
+my $in = <>;
+my $re = qr(
+  ^ (?: \QBuilding and testing\E | \s* CPAN\.pm: .+? (?i:build)\S* ) \s+ (\S+)
+  .*?
+  ^ === \s \QSkipping nonessential autogenerated tests: \E([^\n]+)
+)msx;
+while ( $in =~ /$re/g ) {
+  print "!!! Skipped nonessential tests while installing $1: $2\n"
+}
+' <<< "$LASTOUT")
 
-  # this is a fucked CPAN - save the log as we may need it
-  CPAN_is_sane || INSTALLDEPS_OUT="$LASTOUT"
+    unset HARNESS_SUBCLASS
+  fi
 
 else
-  # listalldeps is deliberate - will upgrade everything it can find
-  parallel_installdeps_notest $(make listalldeps)
-
   if [[ -n "$TEST_BUILDER_BETA_CPAN_TARBALL" ]] ; then
     parallel_installdeps_notest $TEST_BUILDER_BETA_CPAN_TARBALL
   fi
+
+  # listalldeps is deliberate - will upgrade everything it can find
+  parallel_installdeps_notest $(make listalldeps)
 fi
 
-echo_err "$(tstamp) Dependency configuration finished"
+echo_err "$(tstamp) Dependency installation finished"
 # this will display list of available versions
 perl Makefile.PL
 
@@ -148,7 +154,7 @@ perl Makefile.PL
 if [[ -n "$(make listdeps)" ]] ; then
   echo_err "$(tstamp) Not all deps installed - something went wrong :("
   sleep 1 # without this the echo below confuses the console listener >.<
-  CPAN_is_sane || echo_err -e "Outdated CPAN.pm used - full logs follows\n$INSTALLDEPS_OUT\n\nSearch for 'NOT OK' in the text above\n\nDeps still missing:"
+  CPAN_is_sane || echo_err -e "Outdated CPAN.pm used - full installdep log follows\n$INSTALLDEPS_OUT\n\nSearch for 'NOT OK' in the text above\n\nDeps still missing:"
   sleep 3 # without this the above echo confuses the console listener >.<
   make listdeps
   exit 1