#!/usr/bin/perl

$II2PKGDIR = $ENV{"II2PKGDIR"};
$II2INSTALLDIR = $ENV{"II2INSTALLDIR"};
$II2RESOURCES = $ENV{"II2RESOURCES"};
$II2DOSERVER = $ENV{"II2DOSERVER"};
$II2BUILDSTAMP = $ENV{"II2BUILDSTAMP"};

$TEXIPKGTEXLIVE = $ENV{"TEXIPKGTEXLIVE"};
$TEXIPKGTETEX = $ENV{"TEXIPKGTETEX"};

$PROGNAME = `"${II2RESOURCES}/basename" "$0"`;
chomp( $PROGNAME);

if (${II2BUILDSTAMP} < 1167840304) {
    warn "### You need at least i-Installer 2.87 for this package. Bailing out...\n";
    exit 1;
}

my $arch = `uname -p`; chomp $arch;

print "### ${PROGNAME}: Started...\n";

# Add our installed TeX to the beginning of the PATH so it will always
# be found first. It would be better to add it to the end and check
# with which that we have the right one. Too much work for now.
$ENV{"PATH"} = "${II2INSTALLDIR}/bin/${arch}-apple-darwin-current:$ENV{'PATH'}";

setConfigUser();

# Load shared stuff
require "${II2PKGDIR}/tex.sharedscript.pm";

print "### ${PROGNAME}: TeX Live: ${TEXIPKGTEXLIVE} teTeX: ${TEXIPKGTETEX}\n";

# Set that contains the set selected during any previous selector phase. This is received
# from i-Installer:
my %set = getSetInfo(); # sets %set

if (not -x "/usr/bin/grep") {
    print "### ${PROGNAME}: TeX needs commands from the BSD subsystem to run. The BSD subsystem seems to be missing on this system. Bailing out...\n";
    exit( 1);
}

if (${II2INSTALLDIR} eq "") {
    ipkgwarn( "Your environment is damaged, your Mac OS X installation or your user account is probably damaged. Try running a disk repair program or install from another user's account. Bailing out...\n");
    exit( 1);
}

if ( not -w "${II2INSTALLDIR}" or ! -d "${II2INSTALLDIR}") {
    ipkgwarn( "Cannot write in directory ${II2INSTALLDIR}. Bailing out...\n");
    exit( 1);
}

if (-d "${II2INSTALLDIR}/share/texmf.macosx") {
    print "### ${PROGNAME}: Modifying old-style TeX directory layout....\n";
    if (-f "${II2INSTALLDIR}/README.texmf.macosx") {
	print "### ${PROGNAME}: Renaming README.texmf.macosx.\n";
	ipkgsystem( "(cd \"${II2INSTALLDIR}\"; mv README.texmf.macosx README.texmf.gwtex)");
    }
    if (-f "${II2INSTALLDIR}/texmf.cnf") {
	print "### ${PROGNAME}: Saving copy of texmf.cnf.\n";
	ipkgsystem( "(cd \"${II2INSTALLDIR}\" ;mv texmf.cnf texmf.gwtex.oldstructure)");
    }
    if (-l "${II2INSTALLDIR}/share/texmf.os") {
	print "### ${PROGNAME}: Removing texmf.os symbolic link.\n";
	ipkgsystem( "(cd \"${II2INSTALLDIR}\"/share ;rm texmf.os)");
    }
    print "### ${PROGNAME}: Renaming texmf.macosx.\n";
    ipkgsystem( "(cd \"${II2INSTALLDIR}\"/share ;mv texmf.macosx texmf.gwtex)");
    print "### ${PROGNAME}: Removing old (mixed) texmf tree. Please wait...\n";
    ipkgsystem( "(cd \"${II2INSTALLDIR}\"/share ;rm -rf texmf)");
    ipkgwarn( "NOTE: Your TeX directory layout has been modified. You will need to install TeX Programs.\n");
    ipkgsystem( "rm -f \"${II2INSTALLDIR}\"/.*texbinaries*  >/dev/null 2>&1");
}

`"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 10000`;

if (-d "${II2INSTALLDIR}/share/texmf.tetex" or
    -d "${II2INSTALLDIR}/share/texmf.gwtex") {
    print "### ${PROGNAME}: You are using my TeX directory layout. Good.\n";

    my $uninstalledSetString = "";

    if ($set{'tl2003-bin-powerpc'}{'selected'} eq 'YES' or
	$set{'tl2004-bin-i386'}{'selected'} eq 'YES' or
	$set{'tl2004-bin-powerpc'}{'selected'} eq 'YES' or
	$set{'tl2005-bin-i386'}{'selected'} eq 'YES' or
	$set{'tl2005-bin-powerpc'}{'selected'} eq 'YES') {
	if (-f "${II2INSTALLDIR}/bin/${arch}-apple-darwin-current/xetex") {
	    print "### ${PROGNAME}: Found XeTeX install.\n";
	    ipkgwarn( "I found a XeTeX install inside my install location. You will need to reinstall XeTeX after you have installed TeX.\n");
	    ipkgsystem( "${fmtutilcmd} --disablefmt xetex </dev/null");
	    ipkgsystem( "${fmtutilcmd} --disablefmt xelatex </dev/null");
	    ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/tex/xetex >/dev/null 2>&1");
	    ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/fonts/*/xetex >/dev/null 2>&1");
	    ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/xetex >/dev/null 2>&1");
	}
	&removetexprogramessentials();
	$uninstalledSetString .= "tl2003-bin-powerpc|tl2004-bin-powerpc|tl2005-bin-powerpc|tl2005-bin-i386|";
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 20000`;

    if ($set{'tetex2-texmfe'}{'selected'} eq 'YES' or
	$set{'tetex3-texmfe'}{'selected'} eq 'YES') {
	&removetetexfoundation();
	$uninstalledSetString .= "tetex2-texmfe|tetex3-texmfe|";
	if (not $set{'tetex2-texmfdoc'}{'selected'} eq 'YES' or
	    not $set{'tetex3-texmfdoc'}{'selected'} eq 'YES') {
	    warn "### ${PROGNAME}: teTeX documentation removed automatically because its parent, the teTeX texmf tree has been removed.\n";
	    $uninstalledSetString .= "tetex2-texmfdoc|tetex3-texmfdoc|";
	}
    }
    elsif ($set{'tetex2-texmfdoc'}{'selected'} eq 'YES' or
	   $set{'tetex3-texmfdoc'}{'selected'} eq 'YES') {
	&removetetexfoundationdocs();
	$uninstalledSetString .= "tetex2-texmfdoc|tetex3-texmfdoc|";
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 90000`;

    if ($set{'gwtex23'}{'selected'} eq 'YES') {
	&removegwtexfoundation();
	$uninstalledSetString .= "gwtex23|";
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 30000`;

    if ($set{'tex4ht'}{'selected'} eq 'YES') {
	print "### ${PROGNAME}: Removing \"$set{'tex4ht'}{'name'}\". Please wait...\n";
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/tex4ht >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/tex/generic/tex4ht >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/tex/generic >/dev/null 2>&1");
	$uninstalledSetString .= "tex4ht|";
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 10000`;

    if ($TEXIPKGTETEX eq '3' or $set{'gwtex2'}{'selected'} eq 'YES') {
	print "### ${PROGNAME}: Removing old Latin Modern install. Please wait...\n";
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/doc/fonts/lm >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/doc/fonts >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/dvips/lm >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/dvips >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/fonts/*/public/lm >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/fonts/*/public >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/tex/latex/lm >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/tex/latex >/dev/null 2>&1");
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 10000`;

    if ($set{'xmljadetex'}{'selected'} eq 'YES') {
	print "### ${PROGNAME}: Removing \"$set{'xmljadetex'}{'name'}\". Please wait...\n";
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/tex/jadetex >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/doc/jadetex >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/source/jadetex >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/tex/xmltex >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/doc/xmltex >/dev/null 2>&1");
	ipkgsystem( "rm -rf \"${II2INSTALLDIR}\"/share/texmf.local/source/xmltex >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/tex >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/doc >/dev/null 2>&1");
	ipkgsystem( "rmdir -p \"${II2INSTALLDIR}\"/share/texmf.local/source >/dev/null 2>&1");
	$uninstalledSetString .= "xmljadetex|";
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 10000`;

    if ($set{'tl2003-lib-powerpc'}{'selected'} eq 'YES' or $set{'tl2004-lib-powerpc'}{'selected'} eq 'YES' or $set{'tl2005-lib-universal'}{'selected'} eq 'YES') {
	&removetexprogramextras();
	$uninstalledSetString .= "tl2003-lib-powerpc|tl2004-lib-powerpc|tl2005-lib-universal|";
    }

    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 10000`;

    if ($uninstalledSetString ne '') {
	# UnsetInstalled also clears configured state
	chop( $uninstalledSetString) if $uninstalledSetString =~ /\|$/; 
	`"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t UnsetInstalledSelectorSets -P "$uninstalledSetString"`;
    }
}
else {
    if (-d "${II2INSTALLDIR}/share/texmf" or -d "${II2INSTALLDIR}/texmf") {
	ipkgwarn( "Unfamiliar TeX directory layout. No removal before unarchiving. This may cause problems when you use TeX.\n");
	$doresult = `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t Alert -T "Unknown layout!" -I "Your TeX layout is not recognized. No parts will be removed before new parts are installed.\n\nThis may lead to doubles and an unreliable setup." -1 "Continue"`;
    }
    `"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 180000`;
}

# make sure all subdirs for parts of the archive exist (temp fix. should be in i-Installer!):
ipkgsystem( "mkdir -p \"${II2INSTALLDIR}\"/share/texmf.local >/dev/null 2>&1");

`"${II2RESOURCES}/doalerter" -s "${II2DOSERVER}" -V -t IncrementProgress -p 10000`;

warn "### ${PROGNAME}: Finished.\n";
print "### ${PROGNAME}: Finished.\n";

sub setConfigUser
{
    if (-e "${II2INSTALLDIR}/bin/${arch}-apple-darwin-current/texconfig-sys") {
	if ($> == 0) {
	    print "### ${PROGNAME}: System wide configuration, TL2005-style.\n";
	    ${configforuser} = 'root';
	    ${sudocmd} = "sudo -H -u ${configforuser}";
	    ${texconfigcmd} = "${sudocmd} texconfig-sys";
	    ${fmtutilcmd} = "${sudocmd} fmtutil-sys";
	    ${updmapcmd} = "${sudocmd} updmap-sys";
	    ${kpsewhichcmd} = "${sudocmd} kpsewhich";
	}
	else {
	    print "### ${PROGNAME}: Configuring system-wide for user $ENV{'II2USER'}, TL2005-style.\n";
	    ${configforuser} = $ENV{'II2USER'};
	    ${sudocmd} = "";
	    ${texconfigcmd} = "${sudocmd} texconfig-sys";
	    ${fmtutilcmd} = "${sudocmd} fmtutil-sys";
	    ${updmapcmd} = "${sudocmd} updmap-sys";
	    ${kpsewhichcmd} = "${sudocmd} kpsewhich";
	}
    }
    else {
	if ($> == 0) {
	    print "### ${PROGNAME}: System wide configuration, pre-TL2005-style.\n";
	    ${configforuser} = 'root';
	    ${sudocmd} = "sudo -H -u ${configforuser}";
	    ${texconfigcmd} = "${sudocmd} texconfig";
	    ${fmtutilcmd} = "${sudocmd} fmtutil";
	    ${updmapcmd} = "${sudocmd} updmap";
	    ${kpsewhichcmd} = "${sudocmd} kpsewhich";
	}
	else {
	    print "### ${PROGNAME}: Configuring system-wide for user $ENV{'II2USER'}, pre-TL2005-style.\n";
	    ${configforuser} = $ENV{'II2USER'};
	    ${sudocmd} = "";
	    ${texconfigcmd} = "${sudocmd} texconfig";
	    ${fmtutilcmd} = "${sudocmd} fmtutil";
	    ${updmapcmd} = "${sudocmd} updmap";
	    ${kpsewhichcmd} = "${sudocmd} kpsewhich";
	}
    }
}

# $Id: tex.prepare 110 2006-12-28 21:58:00Z gctwnl $
