From d26f20ff4f4494c4dfe26793918edf9c42ecd47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Mon, 21 Jun 2021 11:20:58 +0200 Subject: wpdf: Support implicit dependencies --- wpdf | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'wpdf') diff --git a/wpdf b/wpdf index 58409db..304f687 100755 --- a/wpdf +++ b/wpdf @@ -5,34 +5,46 @@ use strict; use warnings; -my %deps; +my %deptarget; # dependency => target # collect dependencies for given pdf files -for (@ARGV) { - if (/\.pdf$/) { - (my $name = $_) =~ s/\.pdf$//; +for my $target (@ARGV) { + if ($target =~ /\.pdf$/) { + # try to directly parse out dependencies open my $f, '<', 'Makefile' or die "could not open Makefile: $!\n"; while (<$f>) { - if (/^\Q$name.pdf\E:\s*(.*)/) { - $deps{$_} = $name for split /\s/, $1; - last; - } + next if not /^\Q$target\E:\s*(.*)/; + $deptarget{$_} = $target for split /\s/, $1; + goto found; } - close $f; - exec('xpdf', '-remote', "wpdf-$name", "$name.pdf") if fork == 0; + + # try to get implicit dependencies + (my $esc = $target) =~ s/'/'"'"'/g; + open my $p, "make -ndv 2>&1 '$esc' |" + or die "could not run make: $!\n"; + while (<$p>) { + next if not /^\Q$target\E:< = (.*)/; + $deptarget{$_} = $target for split /\s/, $1; + last; + } + + close $p; +found: close $f; + exec('xpdf', '-remote', "wpdf-$target", $target) if fork == 0; + next; } else { warn "skipping $_: not a pdf\n"; } } # make pdf on demand -open my $p, '-|', 'watch', keys %deps +open my $p, '-|', 'watch', keys %deptarget or die "could not start watch: $!\n"; while (<$p>) { chomp; - system('make', "$deps{$_}.pdf") == 0 - && system('xpdf', '-remote', "wpdf-$deps{$_}", '-reload'); + system('make', "$deptarget{$_}") == 0 + && system('xpdf', '-remote', "wpdf-$deptarget{$_}", '-reload'); } close $p; exit($? != 0); -- cgit v1.2.3