syntax.t 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/perl
  2. #
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; either version 2 of the License, or
  6. # (at your option) any later version.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. use strict;
  16. use warnings;
  17. use Test::More;
  18. use Test::Dpkg qw(:needs);
  19. test_needs_srcdir_switch();
  20. my @files = Test::Dpkg::all_perl_files();
  21. plan tests => scalar @files;
  22. my $PERL = $ENV{PERL} // $^X // 'perl';
  23. # Detect compilation warnings that are not found with just «use warnings»,
  24. # such as redefinition of symbols from multiple imports. We cannot use
  25. # Test::Strict::syntax_ok because it does not pass -w to perl, and does not
  26. # check for other issues whenever perl states the syntax is ok.
  27. sub syntax_ok {
  28. my $file = shift;
  29. my $eval = `$PERL -cw \"$file\" 2>&1`;
  30. my $ok = ($eval =~ s{^\Q$file\E syntax OK\n$}{}ms) && length $eval == 0;
  31. ok($ok, "Compilation check $file");
  32. if (not $ok) {
  33. diag($eval);
  34. }
  35. }
  36. for my $file (@files) {
  37. syntax_ok($file);
  38. }