I built pfs{tools-1.6.2,tmo-1.1,calibrate-1.3} myself today, and attempted to run through some sample images. I hadn't noticed that I didn't have PPM libraries properly set up or installed, and running pfsinhdrgen didn't give me any output.
First, pfsinhdrgen doesn't check for a failure to load any of the images; it ignores errors in loading, which leads to the next stage failing. The relevant line is:
system "pfsin $file 2> /dev/null | pfstag --set \"BV=$Bv\"\n";
which should be changed to something more like:
system("pfsin $file 2> /dev/null | pfstag --set \"BV=$Bv\"\n") == 0
or die "Failed to open image '$file'";
However, this in and of itself doesn't fix the issue; pfsin returns success (0) even when it fails to run.
$ pfsin -v test1.jpg; echo $?
jpegtopnm: WRITING PPM FILE
/usr/local/bin/pfsin: line 107: pfsinppm: command not found
0
This is part of a set of if-else alternators which check for imgmagick, then attempt to use netpbm. Where the logic is currently along the lines of:
if imagemagic available; then
use imagemagick
else
use netpbm
it should be more like:
if imagemagic available; then
use imagemagick
else if netpbm available; then
use netpbm
else
print an error
exit 1
pfsin now reports an error if both NetPBM and ImageMagick are missing.
Catching an error in pfsinhdrgen:
system("pfsin $file 2> /dev/null | pfstag --set \"BV=$Bv\"\n") == 0
will not work because "system" returns the error status from the last command in the pipe. $PIPESTATUS could provide such information but it is bash only.