#!/usr/bin/perl -w
#
# This opustex Perl script automates the three-pass TeX compilation
# of a OpusTeX music score file.  It basically runs the command:
#   $ tex filename.tex ; opusflex filename ; tex filename.tex
#
# Adapted by Anthony Fok <foka@gpu.srv.ualberta.ca> for Debian GNU/Linux
# from the DOS batch file in the OpusTeX User Manual by OpusTeX's authors.
#
# Initial version:  Mon, 14 Jul 1997 07:15:00 -0600
#   Last modified:  Fri,  7 Nov 1997 21:45:14 -0700

use strict;
my ($package, $pkg_name, $flex, $filename, $basename);

$package = "opustex";
$pkg_name = "OpusTeX";
$flex = "opusflex";

sub usage() {
    print <<"EOF";
This script automates the three-pass TeX compilation of $pkg_name
music score files.  Note: This script may not work for certain files.
You may run tex/latex and $flex manually in such cases.

Usage: $package file.tex [TeX options]

For more information, please refer to "/usr/doc/$package/README.debian".
EOF
    exit(1);
}

# Main program

if ($#ARGV == -1) { usage() };

$filename = shift @ARGV;

# Strip trailing file extension (.tex), if any.
$filename = $1 if $filename =~ /([^\.]+)\.?/;

# Strip paths from filename
$basename = $1 if $filename =~ /([^\.\/]+$)/;

# Note: TeX writes its output to the current directory.
#       Therefore, we use musixflex to process the file in the
#       current directory.

if ( -e "$filename.tex") {
    unlink("$basename.ox1", "$basename.ox2");
    	# or die "Can't remove old $basename.ox1 and $basename.ox2 files: $!";
    system("tex", "\&$package", "$filename.tex", @ARGV) == 0
    	or die "First pass of TeX failed on $filename.tex: $!";
    system($flex, "$basename.ox1") == 0
    	or die "$flex failed to process $basename.ox1: $!";
    system("tex", "\&$package", "$filename.tex", @ARGV) == 0
    	or die "Second pass of TeX failed on $filename.tex: $!";
} else {
    print STDERR "$0: $filename.tex does not exist!\n\n";
    usage();
}
