syntax.t 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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;
  19. if (defined $ENV{srcdir}) {
  20. chdir $ENV{srcdir} or die "cannot chdir to source directory: $!";
  21. }
  22. my @files = Test::Dpkg::all_perl_files();
  23. plan tests => scalar @files;
  24. my $PERL = $ENV{PERL} // $^X // 'perl';
  25. # Detect compilation warnings that are not found with just «use warnings»,
  26. # such as redefinition of symbols from multiple imports. We cannot use
  27. # Test::Strict::syntax_ok because it does not pass -w to perl, and does not
  28. # check for other issues whenever perl states the syntax is ok.
  29. sub syntax_ok {
  30. my $file = shift;
  31. my $eval = `$PERL -cw \"$file\" 2>&1`;
  32. my $ok = ($eval =~ s{^\Q$file\E syntax OK\n$}{}ms) && length $eval == 0;
  33. ok($ok, "Compilation check $file");
  34. if (not $ok) {
  35. diag($eval);
  36. }
  37. }
  38. for my $file (@files) {
  39. syntax_ok($file);
  40. }