home *** CD-ROM | disk | FTP | other *** search
- : # Use perl
- eval 'exec perl -S $0 "$@"'
- if $running_under_some_shell;
-
- $vid=101;
- $| = 1;
- %p = ("ImageMagick","mogrify", "pbmplus","giftoppm", "netpbm","giftopnm",
- "TeX","tex", "Ghostscript","gs");
- @perl = ("Image/Magick.pm", "LWP/UserAgent.pm", "www.pl", "network.pl");
- @reqpath = ();
-
- die "I am sorry, html2ps requires Perl 5.\n" if($]<5);
-
- if(!-e "/dev/null") {
- &getval($goon, "n", "\nThis installation script is for Unix systems, "
- ."and yours does not seem to\nbe one. Do you want to continue anyway?");
- die "\n" if($goon=~/^n/i);
- }
-
- print <<EOD;
-
- This is the installation script for html2ps. To get full functionality, some
- external program packages need to be installed. You may wish to install these
- first (see the enclosed documentation for addresses):
-
- * For conversion on inline images, any of the packages ImageMagick, pbmplus
- or netpbm.
-
- * To retrieve remote documents you must have either libwww-perl or both the
- Perl files www.pl and network.pl installed. Alternatively, some program
- like url_get or lynx.
-
- * To be able to generate cross references and DSC PostScript, you must
- have Ghostscript installed.
-
- * To be able to convert documents using the MATH element from HTML 3.0,
- you need both TeX and dvips.
-
- This script creates a file describing the local configuration. To make this
- accurate, you should have your search PATH set to include the directories
- where the abovementioned packages are. You must also have write access to
- the directories where the files should be placed.
- EOD
-
- &getval($goon, "y", "\nDo you want to proceed with the installation?");
- die "\n" if($goon!~/^y/i);
-
- print "\n";
- for $req (@perl) {
- print "Searching for $req: ";
- X:for $dir (@INC) {
- if(-f "$dir/$req") {
- $module{$req} = 1;
- print "found ($dir/$req)\n";
- last X;
- }
- }
- print "not found\n" if(!$module{$req});
- }
-
- $pack = "";
- if(&exist("ImageMagick",1)) {
- $pack .= " ImageMagick: 1;\n";
- $pack .= " PerlMagick: 1;\n" if($module{"Image/Magick.pm"});
- } elsif(&exist("netpbm",1)) {
- $pack .= " netpbm: 1;\n";
- } elsif(&exist("pbmplus",1)) {
- $pack .= " pbmplus: 1;\n";
- }
-
- print <<EOW if(!$pack);
-
- Could not find any image conversion package (pbmplus, netpbm or ImageMagick)
- in your search path. If you want to be able to have inline images (other than
- XBM images) included in the PostScript code, you must install one of these
- packages. If you do indeed have any of these packages installed, you will
- have to edit the configuration file manually, see the documentation for
- details.
-
- EOW
-
- for ("djpeg","TeX","dvips","Ghostscript") {
- if(&exist($_,1)) {
- $pack .= " $_: 1;\n";
- }
- }
- if(&exist("weblint",1)) {
- $pack .= " check: weblint;\n";
- }
-
- if($module{'LWP/UserAgent.pm'}) {
- $pack .= " libwww-perl: 1;\n";
- } elsif($module{'www.pl'} && $module{'network.pl'}) {
- $pack .= " jfriedl: 1;\n";
- } else {
- if(&exist("lynx",0)) {
- $lynx = 1;
- $lynxcmd = "lynx -source -mime_header";
- $getdef = $lynxcmd;
- }
- if(&exist("url_get",0)) {
- $url_get = 1;
- $ugcmd = "url_get -h";
- $getdef = $ugcmd;
- }
- $both = $url_get && $lynx? "\n(for example '$ugcmd' or '$lynxcmd')": "";
- $none = $url_get || $lynx? "":
- ", or press <return> to convert local files only";
- &getval($geturl, $getdef,
- "\nBy default html2ps uses libwww-perl or the Perl scripts www.pl and "
- ."network.pl to\nretrieve remote documents, I cannot find these on your "
- ."system. You may instead\nuse some command that can retrieve documents "
- ."_with_a_complete_MIME_header_$both\.\nEnter such a command$none");
- $geturl = "/bin/true" if(!$geturl);
- $pack .= " geturl: \"$geturl\";\n";
- }
-
- if(@reqpath) {
- $pack .= ' path: "'.join(':',@reqpath).'";';
- }
-
- chop ($cd = `pwd`);
-
- $prefix = "/usr/local";
-
- &getval($ans, "y",
- "\nBy default all files will be installed in subdirectories 'bin', 'lib',\n"
- ."and 'man' in a common directory. Is this OK?");
- $def = $ans=~/^y/i;
-
- if($def) {
- &getval($prefix, "$prefix", "\nEnter the name of this directory");
- &fixdir($prefix);
- &mkdir($prefix,0);
- }
-
- if($def) {
- $bindir = "$prefix/bin";
- } else {
- &getval($bindir, "$prefix/bin",
- "\nEnter the directory where the html2ps script should be put");
- &fixdir($bindir);
- ($prefix) = $bindir=~m|(.*)/[^/]+|;
- }
- &mkdir($bindir,$def);
-
- if($def) {
- $glob = "$prefix/lib/html2ps";
- } else {
- &getval($glob, "$prefix/lib/html2ps",
- "\nEnter the the directory where the global configuration file for\n"
- ."html2ps should be put");
- $glob =~ s|/$||g;
- &fixdir($glob);
- }
- &mkdir($glob,$def);
- $repl = "y";
- if(-f "$glob/html2psrc") {
- &getval($repl, "y", "\nA file $glob/html2psrc already exists, replace?");
- }
-
- if($def) {
- $man1 = "$prefix/man/man1";
- } else {
- &getval($man1, "$prefix/man/man1",
- "\nEnter the directory for the html2ps manual page");
- &fixdir($man1);
- }
- &mkdir($man1,$def);
-
- if($def) {
- $man5 = "$prefix/man/man5";
- } else {
- &getval($man5, "$prefix/man/man5",
- "\nEnter the directory for the manual page describing the configuration\n"
- ."file format for html2ps");
- &fixdir($man5);
- }
- &mkdir($man5,$def);
-
- $ht = "\nTo use the automatic hyphenation feature, hyphenation pattern files\n"
- ."from the TeX distribution are needed.";
- $cophy = 1;
- if($exist{'TeX'}) {
- $hfile = "";
- ($texdir = $dir{'TeX'}) =~ s|/bin$||;
- SW:for("texmf/tex/generic/hyphen","macros","inputs","lib/macros",
- "lib/inputs","lib/tex/macros","lib/tex/inputs") {
- if(-f "$texdir/$_/ushyph1.tex") {
- $hyph = "$texdir/$_";
- $hfile = "$hyph/ushyph1.tex";
- last SW;
- }
- if(-f "$texdir/$_/hyphen.tex") {
- $hyph = "$texdir/$_";
- $hfile = "$hyph/hyphen.tex";
- last SW;
- }
- }
- if($hfile) {
- &getval($hdef, "y", "$ht I believe that I have found\nthe pattern "
- ."file for English in your TeX installation:\n\n "
- ."$hfile\n\nWould you like to use this instead of the "
- ."file included with html2ps?");
- if($hdef=~/^y/i) {
- $cophy = 0;
- } else {
- $hfile = "";
- }
- } else {
- &getval($hfile, "", "$ht I cannot find the pattern\nfile for English "
- ."in your TeX installation. (It should be called\n'hyphen.tex', "
- ."or perhaps 'ushyph1.tex', somewhere in the directory\ntree "
- ."'$texdir'.)\n\nIf you know where this file is and want to use it "
- ."instead of the\nfile included with html2ps, enter the full path "
- ."name for this file,\notherwise press <return>");
- while($hfile && !-f $hfile) {
- &getval($hfile, "", "\nNo such file: $hfile\nEnter new name, or "
- ."press <return> to use the supplied file");
- }
- $cophy = $hfile !~ /\S/;
- }
- if(!$hfile) {
- if($def) {
- $hyph = "$prefix/lib/html2ps";
- } else {
- &getval($hyph, "$prefix/lib/html2ps",
- "\nOK, I will use the supplied pattern file for English. Enter "
- ."the directory\nwhere this file should be put");
- &fixdir($hyph);
- }
- }
- } else {
- if($def) {
- $hyph = "$prefix/lib/html2ps";
- } else {
- &getval($hyph, "$prefix/lib/html2ps", "$ht A pattern file for English is\n"
- ."included with html2ps (see the documentation how to install pattern\n"
- ."files for other languages). Enter the directory where this file\n"
- ."should be put");
- }
- }
- if($cophy) {
- &mkdir($hyph,0);
- $hfile = "$hyph/hyphen.tex";
- }
-
- if($def) {
- $html = "$prefix/lib/html2ps";
- } else {
- &getval($html, "$prefix/lib/html2ps",
- "\nEnter a directory where to put the HTML document describing\nhtml2ps");
- &fixdir($html);
- }
- &mkdir($html,$def);
-
- $paper = "";
- &getval($format, "A4",
- "\nEnter the default paper type, possible choices are:\nA0, A1, A2, A3, A4,"
- ." A5, A6, A7, A8, A9, A10,\nB0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10,\n"
- ."letter, legal, arche, archd, archc, archb, archa,\nflsa, flse, halfletter,"
- ." 11x17, ledger, other");
- if($format !~ /^other$/i) {
- $paper .= " type: $format;";
- } else {
- &getval($height, "",
- "\nDefault paper height i centimeters (1 inch = 2.54 centimeters)");
- &getval($width, "", "\nDefault paper width i centimeters");
- $paper .= " height: $height;\n";
- $paper .= " width: $width;";
- }
-
- open(RC,">html2psrc") || die "Error openin html2psrc\n";
- print RC "/* Global configuration file for html2ps */\n\n"
- ."\@html2ps {\n package {\n$pack\n }\n paper {\n$paper\n }\n"
- ." hyphenation {\n en {\n file: \"$hfile\";\n }\n }\n}\n";
- close RC;
-
- undef $/;
- open(HTML2PS,"html2ps") || die "Error openin html2ps\n";
- ($code = <HTML2PS>) =~ s|\$globrc=.*|\$globrc='$glob/html2psrc';|;
- close HTML2PS;
- open(HTML2PS,">html2ps") || die "Error openin html2ps\n";
- print HTML2PS $code;
- close HTML2PS;
- chmod 0755, "html2ps";
-
- $files = "$glob/html2psrc\n.br\n\$HOME/.html2psrc\n.br\n$html/html2ps.html\n";
- $files = <<EOF;
- .TP
- $glob/html2psrc
- Global configuration file. See html2psrc(5).
- .TP
- \$HOME/.html2psrc
- User configuration file. See html2psrc(5).
- .TP
- $html/html2ps.html
- Documentation for html2ps.
- EOF
-
- open(MAN1,"html2ps.1") || die "Error openin html2ps.1\n";
- ($code = <MAN1>) =~ s|(\.SH FILES)[\w\W]*(\.SH SEE ALSO)|$1\n$files$2|;
- close MAN1;
- open(MAN1,">html2ps.1") || die "Error openin html2ps.1\n";
- print MAN1 $code;
- close MAN1;
-
- $odir = "oldfiles.$vid";
- $saved = -d $odir;
- $backout = "";
-
- print "\n";
- &inst($bindir,"html2ps");
- if(!$saved && -f "$glob/html2psrc") {
- $backout .= "\ncp $odir/html2psrc $glob";
- `cp $glob/html2psrc $odir`;
- }
- if($repl=~/^y/i) {
- print "Installing html2psrc in $glob\n";
- `cp html2psrc $glob`;
- }
- &inst($man1,"html2ps.1");
- &inst($man5,"html2psrc.5");
- if($cophy) {
- print "Installing hyphen.tex in $hyph\n";
- `cp hyphen.tex $hyph`;
- }
- &inst($html,"html2ps.html");
-
- if(!$saved && $backout) {
- open(BACKOUT,">backout") || die "Error openin backout\n";
- print BACKOUT "#!/bin/sh\n$backout\nrm -r $odir\n";
- close BACKOUT;
- chmod 0755, "backout";
- }
- if(-d $odir) {
- print "\nIf you are not satisfied with this version of html2ps; you can "
- ."execute\nthe script 'backout' to reinstall your earlier version.\n";
- }
-
- if($repl!~/^y/i) {
- print "\nA new global configuration file 'html2psrc' has been created in "
- ."the current\ndirectory. You can compare this with your old "
- ."configuration file to see if\nany changes need to be done.\n";
- }
-
- print "\nTesting the installation.\n"
- ."Converting the documentation file 'html2ps.html', using the configuration"
- ."\nfile 'sample'. The output will be written to 'html2ps.ps'.\n";
- print `$bindir/html2ps -f sample -o html2ps.ps $html/html2ps.html`;
- print $?? "Something went wrong...\n":
- "\nInstallation completed.\nYou may now try to print the file "
- ."'html2ps.ps' in the current directory.\n";
-
- sub exist {
- local($package,$flag) = @_;
- $program = $p{$package}? $p{$package}: $package;
- print "Searching for $package: ";
- for $dir (split(/:/,$ENV{'PATH'})) {
- if(-f "$dir/$program") {
- $exist{$package} = 1;
- $dir{$package} = $dir;
- print "found ($dir/$program)\n";
- push(@reqpath,$dir) if(!grep(/^$dir$/,@reqpath) && $flag);
- $dir = $dir;
- return 1;
- }
- }
- print "not found\n";
- 0;
- }
-
- sub mkdir {
- while(!-d $_[0]) {
- $cre = "n";
- while(!-d $_[0] && !$_[1] && $cre!~/^(y|$)/i) {
- &getval($cre, "y", "\nDirectory $_[0] does not exist, create?");
- &getval($_[0], "", "\nEnter new directory name") if($cre!~/^y/i);
- die "Configuration aborted\n" if($_[0] eq "");
- }
- S: while($_[0]=~/\/|$/g) {
- if($` && !-d $`) {
- if(mkdir($`,0755)) {
- print "Created directory $`\n";
- } else {
- print "*** Error creating directory $`: $!\n";
- &getval($_[0], "", "\nEnter new directory name");
- die "Configuration aborted\n" if($_[0] eq "");
- last S;
- }
- }
- }
- }
- }
-
- sub fixdir {
- $_[0] = "$cd/$_[0]" if($_[0]!~/^\//);
- while($_[0]=~m|[^/]*/\.\./|) {$_[0] = $`.$'};
- $_[0] =~ s|/\./|/|g;
- }
-
- sub getval {
- $text = $_[1]? "$_[2] [$_[1]]": $_[2];
- print "$text: ";
- ($_[0] = <STDIN>) =~ s/^\s+|[\/\s]+$//g;
- $_[0] = $_[1] if(!$_[0]);
- }
- sub inst {
- if(!$saved && -f "$_[0]/$_[1]") {
- mkdir($odir,0755) || die "Error creating $odir\n" if(!-d $odir);
- $backout .= "\ncp $odir/$_[1] $_[0]";
- `cp "$_[0]/$_[1]" $odir`;
- }
- print "Installing $_[1] in $_[0]\n";
- `cp $_[1] $_[0]`;
- }
-