X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/c47f24178a0ff695262801bf9ca9b0efc9fa56e6..a70f5a4b57e63a823faec313387d85b683bd6af0:/fa-rip diff --git a/fa-rip b/fa-rip index 252c2b5..916c050 100755 --- a/fa-rip +++ b/fa-rip @@ -9,7 +9,7 @@ B - rip a CD for B =head1 SYNOPSIS -B [B<-d> I] [B<-t> I] +B [B<-d> I] [B<-p> I [B<-t> I] =cut @@ -20,8 +20,9 @@ use Env qw( CDDEV ); +use Fcntl qw(O_CREAT O_WRONLY); use File::Temp; -use Getopt::Long; +use Getopt::Long qw(:config gnu_getopt no_ignore_case); use POSIX ':sys_wait_h'; use Pod::Usage; @@ -31,22 +32,16 @@ sub run_or_die { my $command = shift; my $status; - system($command); + $status = system($command); - if (WIFEXITED($?)) { - $status = WEXITSTATUS($?); - if ($status != 0) { - die("$command exited $status"); + if (WIFEXITED($status)) { + if (($status = WEXITSTATUS($status)) != 0) { + die("$command exited with status $status"); } - - } elsif (WIFSIGNALED($?)) { - $status = WTERMSIG($?); - die("$command signalled $status"); - - } elsif (WIFSTOPPED($?)) { - $status = WSTOPSIG($?); - die("$command stopped $status"); - + } elsif (WIFSIGNALED($status)) { + die("$command killed with signal ", WTERMSIG($status)); + } elsif (WIFSTOPPED($status)) { + die("$command stopped with signal ", WSTOPSIG($status)); } else { die("Major horkage on system($command): \$? = $? \$! = $!"); } @@ -137,19 +132,31 @@ sub rip { $device ||= '/dev/cdrom'; - print"$_\n" for ('cdparanoia', '-d', $device, "1-$trackcount", 'wav'); exec('cdparanoia', '-d', $device, "1-$trackcount", 'wav'); # exec prints its own error message so just die; } +sub make_post_processor { + my $command = shift; + + defined($command) or return; + + sysopen(F, 'post-processor', O_CREAT | O_WRONLY, 0555) + or die("sysopen(post-processor, O_CREAT | O_WRONLY, 0555): $!"); + print(F $command, ' "$@"', "\n"); + close(F) or die("close(post-processor, O_CREAT | O_WRONLY, 0555): $!"); +} + MAIN: { + my $post_processor; my $trackcount; my $help; my $tempdir; GetOptions( 'device|d=s' => \$CDDEV, + 'post-processor|p=s', \$post_processor, 'tracks|t=i' => \$trackcount, 'help|h|?' => \$help, ) or pod2usage(); @@ -159,6 +166,7 @@ MAIN: { $tempdir = File::Temp::tempdir('flac-archive.XXXXXXXXXX'); chdir($tempdir) or die("chdir($tempdir): $!"); + make_post_processor($post_processor); $trackcount = mkcue($CDDEV, $trackcount); tags($CDDEV, $trackcount); rip($CDDEV, $trackcount); @@ -190,6 +198,12 @@ have to fill out the candidate-tags-0 template. Use I as the CD-ROM device, instead of the default "/dev/cdrom" or the environment variable CDDEV. +=item B<-p> [B<--post-processor>] I + +Create a "post-processor" file in the temporary directory containing +the line 'I "$@"'. See B's man page for +information about this hook. + =item B<-t> [B<--tracks>] I Archive only the first I tracks. This is handy for