#!/usr/bin/env perl # copy this file and install-w32client.bat to the same directory # as texmf, texmf-dist etc. # sample mini-installer to give Windows systems access to an # existing TeXLive installation # it assumes a standard directory layout, which avoids hard-coded paths. # if this is not the case, adjustments may be necessary. $^W = 1; use TeXLive::TLUtils qw(mkdirhier conv_to_win_path); #use Cwd 'abs_path'; use TeXLive::TLWinGoo qw(non_admin add_texbindir_to_path setenv_reg init_unshortbat add_desktop_shortcut add_menu_shortcut register_extension register_file_type update_assocs broadcast_env create_uninstaller); use strict; # the code below assumes that this script is in $texdir, # the directory above texmf, texmf-dist etc. my $texdir=$0; $texdir=~s!\\!/!g; $texdir=~s!(.*)/.*$!$1!; # private runtime-generated files $::texlive_release = '2008'; my $texdirw = $ENV{'USERPROFILE'}.'/.texlive'.$::texlive_release; $texdirw=~s!\\!/!g; my $private_var = $texdirw.'/texmf-var'; my $private_var_bsl = $private_var; $private_var_bsl =~ s!/!\\!g; # make only per-user modifications non_admin(); # general add_texbindir_to_path($texdir.'/bin/win32'); broadcast_env(); my $mainmenu = "TeX Live 2008"; my $texbindir_bsl = $texdir.'/bin/win32'; $texbindir_bsl =~ s!/!\\!g; mkdirhier("$texdirw/tlpkg/installer"); create_uninstaller($texdir, $texdirw, $private_var, $texdirw.'/texmf-config'); init_unshortbat($texdirw); # if the path can't be fixed globally add command prompt # with texbindir prepended to path if (uc(TeXLive::TLWinGoo::win_which_dir('tex.exe')) ne uc($texdir.'/bin/win32') or uc(TeXLive::TLWinGoo::win_which_dir('pdftex.exe')) ne uc($texdir.'/bin/win32') or uc(TeXLive::TLWinGoo::win_which_dir('luatex.exe')) ne uc($texdir.'/bin/win32')) { add_menu_shortcut( $mainmenu, 'TeX Live Prompt', '', $ENV{'COMSPEC'}, "/k \"path $texbindir_bsl;%path%\"", '', ); } # texlive manual add_menu_shortcut( $mainmenu, 'TeX Live Manual (en)', '', # default pdf icon $texdir.'/texmf-doc/doc/english/texlive-en/live.pdf', '', '', ); # texdoctk documentation browser if (-e $texdir.'/bin/win32/texdoctk.bat') { add_menu_shortcut( $mainmenu, 'TeXdoc GUI', '', # icon $texdir.'/bin/win32/texdoctk.bat', '', # arguments 'batgui', # any non-null value to hide command-prompt ) } # psview add_desktop_shortcut( $texdirw, 'PS_View', $texdir.'/tlpkg/tlpsv/psv.exe', # icon, not prog! $texdir.'/bin/win32/psv.bat', '', # no args 'batgui', # any non-null value to hide command-prompt ); add_menu_shortcut( $mainmenu, 'PS_View', $texdir.'/tlpkg/tlpsv/psv.exe', # icon, not prog! $texdir.'/bin/win32/psv.bat', '', # no args 'batgui', # any non-null value to hide command-prompt ); register_extension(".ps", "PostScript"); register_extension(".eps", "PostScript"); register_file_type("PostScript", '"'.$texdir.'/tlpkg/tlpsv/gswxlua.exe" -g '. '"'.$texdir.'/tlpkg/tlgs/bin/gsdll32.dll" -l '. '"'.$texdir.'/tlpkg/tlpsv/psv.wx.lua" -p '. '"'.$texdir.'/tlpkg/tlpsv/psv_view.ps" -sINPUT="%1"'); update_assocs(); # xetex if (-e $texdir.'/bin/win32/xetex.exe') { my $xetexmfcnf = $private_var.'/web2c'; my $texmfcnf = $xetexmfcnf.';'.$texdir.'/texmf/web2c'; setenv_reg('TEXMFCNF', $texmfcnf); broadcast_env(); mkdirhier($private_var."/fonts"); system("xcopy", "/e", "/i", "/q", "/y", "\"$texbindir_bsl\\conf\"", "\"$private_var_bsl\\fonts\\conf\""); system("xcopy", "/e", "/i", "/q", "/y", "\"$texbindir_bsl\\cache\"", "\"$private_var_bsl\\fonts\\cache\""); if (open(FONTSCONF, "<$texdir/bin/win32/conf/fonts.conf")) { my @lines = ; close(FONTSCONF); if (open(FONTSCONF, ">$private_var/fonts/conf/fonts.conf")) { my $winfontdir; $winfontdir = $ENV{'SystemRoot'}.'/fonts'; $winfontdir =~ s!\\!/!g; foreach (@lines) { $_ =~ s!c:/Program Files/texlive/2008!$texdir!; $_ =~ s!c:/windows/fonts!$winfontdir!; print FONTSCONF; } close(FONTSCONF); } else { warn("Cannot open $private_var/fonts/conf/fonts.conf for writing\n"); } } else { warn ("Cannot open $texdir/bin/win32/conf/fonts.conf\n"); } mkdirhier($xetexmfcnf); if (open(TMF, ">$xetexmfcnf/texmf.cnf")) { print TMF "FONTCONFIG_PATH=\$TEXMFVAR/fonts/conf\n"; print TMF "FC_CACHEDIR=\$TEXMFVAR/fonts/cache\n"; close TMF; } else { warn("Cannot open $xetexmfcnf/texmf.cnf for writing\n"); } $ENV{'TEXMFCNF'} = $texmfcnf; $ENV{'PATH'} = $texbindir_bsl.';'.$ENV{'PATH'}; system("\"$texbindir_bsl\\fc-cache.exe\"", "-v", "-r"); }