summaryrefslogtreecommitdiff
path: root/Build/source/texk
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-10-05 22:40:17 +0000
committerKarl Berry <karl@freefriends.org>2008-10-05 22:40:17 +0000
commit67e5b2e6cda395d72af299734bfd9a385c604b08 (patch)
treedd993f48eab94c05d0f701a3340efbc3af232206 /Build/source/texk
parent172745183f6c7d974358b9514af6e166e0b57e42 (diff)
pdfannotextractor wrapper in perl now
git-svn-id: svn://tug.org/texlive/trunk@10860 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rw-r--r--Build/source/texk/texlive/ChangeLog5
-rw-r--r--Build/source/texk/texlive/Makefile.in2
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/pdfannotextractor.pl425
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/pdfannotextractor.texlua43
4 files changed, 431 insertions, 44 deletions
diff --git a/Build/source/texk/texlive/ChangeLog b/Build/source/texk/texlive/ChangeLog
index ea571ebf26d..95c15ec5605 100644
--- a/Build/source/texk/texlive/ChangeLog
+++ b/Build/source/texk/texlive/ChangeLog
@@ -1,3 +1,8 @@
+2008-10-06 Karl Berry <karl@tug.org>
+
+ * Makefile.in (LINKED_SCRIPTS): pdfannotextractor now has a .pl
+ wrapper from Heiko.
+
2008-09-28 Karl Berry <karl@tug.org>
* Makefile.in (LINKED_SCRIPTS): mtxrun and luatools now link to
diff --git a/Build/source/texk/texlive/Makefile.in b/Build/source/texk/texlive/Makefile.in
index 33959868f09..bf6f076c41a 100644
--- a/Build/source/texk/texlive/Makefile.in
+++ b/Build/source/texk/texlive/Makefile.in
@@ -29,7 +29,7 @@ LINKED_SCRIPTS = \
texmf-dist/scripts/glossaries/makeglossaries \
texmf-dist/scripts/mkjobtexmf/mkjobtexmf.pl \
texmf-dist/scripts/oberdiek/pdfatfi.pl \
- texmf-dist/scripts/pax/pdfannotextractor.texlua \
+ texmf-dist/scripts/pax/pdfannotextractor.pl \
texmf-dist/scripts/ppower4/ppower4.texlua \
texmf-dist/scripts/pdfcrop/pdfcrop.pl \
texmf-dist/scripts/perltex/perltex.pl \
diff --git a/Build/source/texk/texlive/linked_scripts/pdfannotextractor.pl b/Build/source/texk/texlive/linked_scripts/pdfannotextractor.pl
new file mode 100755
index 00000000000..716da9b7bba
--- /dev/null
+++ b/Build/source/texk/texlive/linked_scripts/pdfannotextractor.pl
@@ -0,0 +1,425 @@
+#!/usr/bin/env perl
+use strict;
+$^W=1;
+
+# Copyright (C) 2008 Heiko Oberdiek
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+#
+# This file is part of PDFAnnotExtractor. See README.
+
+my $name = 'PDFAnnotExtractor';
+my $program = "\L$name\E";
+my $file = "$program.pl";
+my $version = "0.1i";
+my $date = "2008/10/01";
+my $author = "Heiko Oberdiek";
+my $copyright = "Copyright (c) 2008 by $author.";
+
+# History:
+# 2008/10/01 v0.1i: First version of the wrapper script.
+
+my $title = "$name $version, $date - $copyright\n";
+my $usage = <<"END_OF_USAGE";
+${title}Syntax: $program [options] <PDF files[.pdf]>
+Options:
+ --help print usage
+ --install try installing PDFBox library
+ --debug debug informations
+END_OF_USAGE
+
+my $help = 0;
+my $debug = 0;
+my $install = 0;
+use Getopt::Long;
+GetOptions(
+ 'debug!' => \$debug,
+ 'install!' => \$install,
+ 'help!' => \$help
+) or die $usage;
+!$help or die $usage;
+!$install and (@ARGV >= 1 or die $usage);
+
+print $title;
+
+my $error = '!!! Error:';
+my $url_pdfbox = 'http://prdownloads.sourceforge.net/pdfbox/PDFBox-0.7.3.zip?download';
+my $size_pdfbox_zip = 22769102;
+my $size_pdfbox_jar = 3321771;
+my $name_pdfbox_jar = 'PDFBox-0.7.3.jar';
+my $entry_pdfbox = "PDFBox-0.7.3/lib/$name_pdfbox_jar";
+my $pdfbox = 'PDFBox';
+
+my $prg_kpsewhich = 'kpsewhich';
+my $prg_wget = 'wget';
+my $prg_curl = 'curl';
+my $prg_unzip = 'unzip';
+my $prg_texhash = 'texhash';
+my $prg_mktexlsr = 'mktexlsr';
+my $prg_java = 'java';
+my %prg;
+
+my $jar_pax = 'pax.jar';
+my $main_class = 'pax.PDFAnnotExtractor';
+my $jar_pdfbox = 'pdfbox.jar';
+my @jar_pdfbox = qw[
+ pdfbox.jar
+ PDFBox.jar
+ pdfbox-0.7.3.jar
+ PDFBox-0.7.3.jar
+ pdfbox-0.7.2.jar
+ PDFBox-0.7.2.jar
+];
+my @dir_jar = qw[
+ /usr/share/java
+ /usr/local/share/java
+];
+my $path_jar_pax = '';
+my $path_jar_pdfbox = '';
+my $classpath = defined $ENV{'CLASSPATH'} ? $ENV{'CLASSPATH'} : '';
+debug('CLASSPATH', $classpath);
+my $pdfbox_in_classpath = $classpath =~ /PDFBox/ ? 1 : 0;
+
+my $is_win = 0;
+$is_win = 1 if $^O =~ /^MSWin(32|64)/i
+ or $^O =~ /^dos/i
+ or $^O =~ /^os2/i;
+debug('is_win', $is_win);
+
+use File::Which;
+
+sub debug ($$) {
+ my $key = shift;
+ my $value = shift;
+ print "* $key: [$value]\n" if $debug;
+}
+
+sub check_prg ($$) {
+ my $prg = shift;
+ my $die = shift;
+ return 1 if $prg{$prg};
+ my $path = which($prg);
+ if ($path) {
+ $prg{$prg} = $path;
+ debug "Which $prg", $path;
+ return 1;
+ }
+ debug "Which $prg", '<not found>';
+ if ($die) {
+ die "$error Cannot find program `$prg'!\n";
+ }
+ return 0;
+}
+
+sub find_jar ($) {
+ my $jar_name = shift;
+
+ check_prg $prg_kpsewhich, 1;
+ my $cmd = "kpsewhich"
+ . " --progname $program"
+ . " --format texmfscripts"
+ . " $jar_name";
+ debug 'Backticks', $cmd;
+ my $path = `$cmd`;
+ if ($? == 0) {
+ chomp $path;
+ debug 'Exit code', '0/success';
+ debug $jar_name, $path;
+ return $path;
+ }
+ if ($? == -1) {
+ die "!!! Error: Cannot execute `$prg_kpsewhich' ($!)!\n";
+ }
+ if ($? & 127) {
+ die "!!! Error: `$prg_kpsewhich' died with signal " . ($? & 127)
+ . (($? & 128) ? ' with coredump' : '') . "!\n";
+ }
+ debug 'Exit code', ($? >> 8);
+ return '';
+}
+
+sub find_jar_pax () {
+ return if $path_jar_pax;
+ foreach my $dir (@dir_jar) {
+ my $path = "$dir/$jar_pax";
+ if (-f $path) {
+ $path_jar_pax = $path;
+ debug $jar_pax, $path_jar_pax;
+ return;
+ }
+ }
+ $path_jar_pax = find_jar $jar_pax;
+ if (!$path_jar_pax) {
+ die "$error Cannot find `$jar_pax'!\n";
+ }
+}
+
+sub find_jar_pdfbox () {
+ return if $path_jar_pdfbox;
+ foreach my $dir (@dir_jar) {
+ foreach my $jar (@jar_pdfbox) {
+ my $path = "$dir/$jar";
+ if (-f $path) {
+ $path_jar_pdfbox = $path;
+ debug $jar_pdfbox, $path_jar_pdfbox;
+ return;
+ }
+ }
+ }
+ foreach my $jar_pdfbox (@jar_pdfbox) {
+ $path_jar_pdfbox = find_jar $jar_pdfbox;
+ last if $path_jar_pdfbox;
+ }
+}
+
+sub launch_pax () {
+ check_prg $prg_java, 1;
+ my @cmd = ($prg_java);
+ my $sep = $is_win ? ';' : ':';
+ my $cp = "$path_jar_pax";
+ $cp .= "$sep$path_jar_pdfbox" if $path_jar_pdfbox;
+ $cp .= "$sep$classpath" if $classpath;
+ push @cmd, '-cp';
+ push @cmd, $cp;
+ push @cmd, $main_class;
+ push @cmd, @ARGV;
+ debug 'System', "@cmd";
+ system @cmd;
+ if ($? == 0) {
+ debug 'Result', 'ok';
+ return 0;
+ }
+ if ($? == -1) {
+ die "$error Cannot execute `$prg_java' ($!)!\n";
+ }
+ if ($? & 127) {
+ die "$error `$prg_java' died with signal " . ($? & 127)
+ . (($? & 128) ? ' with coredump' : '') . "!\n";
+ }
+ my $exit_code = $? >> 8;
+ debug 'Exit code', $exit_code;
+ return $exit_code;
+}
+
+# install part
+
+sub expand_var ($) {
+ my $var = shift;
+ check_prg $prg_kpsewhich, 1;
+ my $cmd = $prg_kpsewhich
+ . " --progname $program"
+ . ' --expand-var';
+ $cmd .= $is_win ? " \$$var" : " \\\$$var";
+ debug 'Backticks', $cmd;
+ my $path = `$cmd`;
+ if ($? == 0) {
+ chomp $path;
+ debug 'Exit code', '0/success';
+ debug "\$$var", $path;
+ return $path;
+ }
+ if ($? == -1) {
+ die "!!! Error: Cannot execute `$prg_kpsewhich' ($!)!\n";
+ }
+ if ($? & 127) {
+ die "!!! Error: `$prg_kpsewhich' died with signal " . ($? & 127)
+ . (($? & 128) ? ' with coredump' : '') . "!\n";
+ }
+ debug 'Exit code', ($? >> 8);
+ return '';
+}
+
+sub ensure_dir ($) {
+ my $dir = shift;
+ return if -d $dir;
+ mkdir $dir or die "$error Cannot create directory `$dir'!\n";
+ debug 'mkdir', $dir;
+}
+
+sub file_size ($) {
+ my $file = shift;
+ return -1 unless -f $file;
+ return (stat $file)[7];
+}
+
+if ($install) {
+ # Can PDFBox already be found?
+ find_jar_pdfbox;
+ if ($path_jar_pdfbox) {
+ print "* Nothing to do, because $pdfbox is already found:\n"
+ . " $path_jar_pdfbox\n";
+ exit(0);
+ }
+
+ # Find TEXMFVAR
+ my $tds_root;
+ foreach my $var ('TEXMFVAR', 'VARTEXMF') {
+ $tds_root = expand_var $var;
+ last if $tds_root;
+ }
+ $tds_root or die "$error Cannot find settings for `TEXMFVAR' or `VARTEXMF'!\n";
+
+ # Create directories
+ ensure_dir $tds_root;
+ my $tds_pax = $tds_root;
+ $tds_pax =~ s/(\/*)$/\/scripts/;
+ ensure_dir $tds_pax;
+ $tds_pax .= '/pax';
+ ensure_dir $tds_pax;
+ my $tds_pax_lib = "$tds_pax/lib";
+ ensure_dir $tds_pax_lib;
+
+ # Download
+ my $dest_file = "$tds_pax/PDFBox-0.7.3.zip";
+ if (file_size $dest_file == $size_pdfbox_zip) {
+ debug "$pdfbox archive found", $dest_file;
+ }
+ else {
+ my @cmd;
+ my $prg_download;
+ check_prg $prg_wget, 0;
+ if ($prg{$prg_wget}) {
+ $prg_download = $prg_wget;
+ push @cmd, $prg_wget;
+ push @cmd, '-O';
+ }
+ else {
+ check_prg $prg_curl, 0;
+ $prg{$prg_curl} or die "$error Cannot find programs `wget' or `curl'"
+ . " for downloading!\n";
+ $prg_download = $prg_curl;
+ push @cmd, $prg_curl;
+ push @cmd, '-L';
+ push @cmd, '-o';
+ }
+ push @cmd, $dest_file;
+ push @cmd, $url_pdfbox;
+ debug 'System', "@cmd";
+ system @cmd;
+ if ($? == 0) {
+ debug 'Result', 'ok';
+ }
+ elsif ($? == -1) {
+ die "$error Cannot execute `$prg_download' ($!)!\n";
+ }
+ elsif ($? & 127) {
+ die "$error `$prg_download' died with signal " . ($? & 127)
+ . (($? & 128) ? ' with coredump' : '') . "!\n";
+ }
+ else {
+ my $exit_code = $? >> 8;
+ die "$error `$prg_download' returns error code `$exit_code'!\n";
+ }
+ -f $dest_file or die "$error Download failed!\n";
+ my $size = file_size $dest_file;
+ $size == $size_pdfbox_zip
+ or die "$error File size of $dest_file is $size,\n"
+ . "but expected size is $size_pdfbox_zip!\n";
+ }
+ print "* Downloaded: $dest_file\n";
+
+ # Unpack jar file
+ check_prg $prg_unzip, 0;
+ if ($prg{$prg_unzip}) {
+ my @cmd = (
+ $prg_unzip,
+ '-j',
+ '-d',
+ $tds_pax_lib,
+ $dest_file,
+ $entry_pdfbox
+ );
+ debug 'System', "@cmd";
+ system @cmd;
+ if ($? == 0) {
+ debug 'Result', 'ok';
+ }
+ elsif ($? == -1) {
+ die "$error Cannot execute `$prg_unzip' ($!)!\n";
+ }
+ elsif ($? & 127) {
+ die "$error `$prg_unzip' died with signal " . ($? & 127)
+ . (($? & 128) ? ' with coredump' : '') . "!\n";
+ }
+ else {
+ my $exit_code = $? >> 8;
+ die "$error `$prg_unzip' returns error code `$exit_code'!\n";
+ }
+ }
+ else {
+ die "$error `$prg_unzip' not found!\n";
+ }
+ my $dest_jar = "$tds_pax_lib/$name_pdfbox_jar";
+ -f $dest_jar or die "$error Unpacking failed!\n";
+ my $size = file_size $dest_jar;
+ $size == $size_pdfbox_jar
+ or die "$error File size of $dest_jar is $size,\n"
+ . "but expected size is $size_pdfbox_jar!\n";
+
+ print "* Unpacked: $dest_jar\n";
+
+ # Update TDS data base
+ my $prg_tds_update;
+ check_prg $prg_texhash, 0;
+ if ($prg{$prg_texhash}) {
+ $prg_tds_update = $prg_texhash;
+ }
+ else {
+ check_prg $prg_mktexlsr, 0;
+ $prg{$prg_mktexlsr} or die "$error Neither `$prg_texhash' nor `$prg_mktexlsr' found!\n";
+ $prg_tds_update = $prg_mktexlsr;
+ }
+ my @cmd = ($prg_tds_update, $tds_root);
+ debug 'System', "@cmd";
+ system @cmd;
+ if ($? == 0) {
+ debug 'Result', 'ok';
+ }
+ elsif ($? == -1) {
+ die "$error Cannot execute `$prg_tds_update' ($!)!\n";
+ }
+ elsif ($? & 127) {
+ die "$error `$prg_tds_update' died with signal " . ($? & 127)
+ . (($? & 128) ? ' with coredump' : '') . "!\n";
+ }
+ else {
+ my $exit_code = $? >> 8;
+ die "$error `$prg_tds_update' returns error code `$exit_code'!\n";
+ }
+
+ # Check installation result
+ find_jar_pdfbox;
+ if ($path_jar_pdfbox) {
+ exit(0);
+ }
+ die "$error Installation failed, because $pdfbox library cannot be found!\n";
+}
+
+# main program
+
+my $ret = 0;
+find_jar_pax;
+if ($pdfbox_in_classpath) {
+ debug 'PDFBox in CLASSPATH', 'yes';
+}
+else {
+ find_jar_pdfbox;
+ $path_jar_pdfbox or die "$error Cannot find $pdfbox library!\n"
+ . "See README and option `--install'.\n";
+}
+exit launch_pax;
+
+__END__
diff --git a/Build/source/texk/texlive/linked_scripts/pdfannotextractor.texlua b/Build/source/texk/texlive/linked_scripts/pdfannotextractor.texlua
deleted file mode 100755
index 311d9cd318d..00000000000
--- a/Build/source/texk/texlive/linked_scripts/pdfannotextractor.texlua
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env texlua
---*-Lua-*-
--- $Id: ppower4.texlua 6969 2008-03-14 22:17:00Z reinhardk $
-
--- Copyright (C) 2008 Reinhard Kotucha.
--- You may freely use, modify and/or distribute this file.
-
--- Launch ppower4
-
-function fixwin(args_unix)
- if os.type == 'windows' then
- local args_win={} -- new table
- args_win[0]=args_unix[1]
- for i=1, #args_unix do
- args_win[i]='"'..args_unix[i]..'"'
- end
- return args_win
- else
- return args_unix
- end
-end
-
-kpse.set_program_name('pdfannotextractor.texlua', 'pdfannotextractor')
-
-jarfile=kpse.find_file('pax.jar', 'texmfscripts')
-
-command={'java', '-jar', jarfile}
-
-for i=1, #arg do
- command[#command+1]=arg[i]
-end
-
-command=fixwin(command)
-
---[[ prepend an additional hyphen to activate this code
-for i=0, #command do
- print (command[i])
-end
-os.exit(ret)
---]]
-
-ret=os.spawn(command)
-os.exit(ret)