summaryrefslogtreecommitdiff
path: root/Master/common.sh
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-13 23:32:53 +0000
committerKarl Berry <karl@freefriends.org>2006-01-13 23:32:53 +0000
commitf155681c16a9cd956036dcfa53ab51e417f4d736 (patch)
tree98536e9d99036e07fe651d1dc1a7539607e359f8 /Master/common.sh
parentdfd69edaf8a3365f902030b877eb52931ea2974f (diff)
top level files
git-svn-id: svn://tug.org/texlive/trunk@1478 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/common.sh')
-rwxr-xr-xMaster/common.sh1384
1 files changed, 1384 insertions, 0 deletions
diff --git a/Master/common.sh b/Master/common.sh
new file mode 100755
index 00000000000..42c04d37bcd
--- /dev/null
+++ b/Master/common.sh
@@ -0,0 +1,1384 @@
+#!/bin/sh
+# $Id: //depot/Master/common.sh#63 $ $Date: 2005/09/27 $ $Author: karl $
+#
+# common.sh -- common routines for the installation procedures.
+# Do not call directly.
+#
+# Copyright (c) Sebastian Rahtz, 2003, 2004, 2005.
+#
+# 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.
+#
+# Send bug reports or suggestions to tex-live@tug.org.
+
+# We only do English, and we don't want different locales to mess up the
+# output of, e.g., ls.
+LC_ALL=C; export LC_ALL
+
+setvars()
+{
+ # These names correspond to the texmf/lists/bin-tex.* files, with -
+ # changed to _.
+ p_alpha_linux_n='DEC Alpha with GNU/Linux'
+ p_alphaev5_osf_n='DEC Alphaev5 OSF'
+ p_i386_darwin_n='Intel x86 with MacOSX/Darwin'
+ p_i386_freebsd_n='Intel x86 with FreeBSD'
+ p_i386_linux_n='Intel x86 with GNU/Linux'
+ p_mips_irix_n='SGI IRIX'
+ p_powerpc_aix_n='Power PC AIX'
+ p_powerpc_darwin_n='Mac OSX/Darwin 5.3 or 6.*'
+ p_sparc_linux_n='Sun Sparc with GNU/Linux'
+ p_sparc_solaris_n='Sun Sparc Solaris'
+ p_win32_n='Windows'
+ p_x86_64_linux_n='Intel x86_64 with GNU/Linux'
+
+
+ iden_1=a
+ iden_2=b
+ iden_3=c
+ iden_4=d
+ iden_5=e
+ iden_6=f
+ iden_7=g
+ iden_8=h
+ iden_9=i
+ iden_10=j
+ iden_11=k
+ iden_12=l
+ iden_13=m
+ iden_14=n
+ iden_15=o
+ iden_16=p
+ iden_17=s
+ iden_18=t
+ iden_19=u
+ iden_20=v
+ iden_21=w
+ iden_22=x
+ iden_23=y
+ iden_24=z
+ iden_25=A
+ iden_26=B
+ iden_27=C
+ iden_28=D
+ iden_29=E
+ iden_30=F
+ iden_31=G
+ iden_32=H
+ iden_33=I
+ iden_34=J
+ iden_35=K
+ iden_36=L
+ iden_37=M
+ iden_38=N
+ iden_39=O
+ iden_40=P
+ iden_41=T
+ iden_42=U
+ iden_43=V
+ iden_44=W
+ iden_45=X
+ iden_46=Y
+ iden_47=Z
+ iden_48=1
+ iden_49=2
+ iden_50=3
+ iden_51=4
+ iden_52=5
+ iden_53=6
+ iden_54=7
+ iden_55=8
+ iden_56=0
+ iden_57=@
+}
+
+
+series_select_level()
+{
+ p=$1
+ l=$2
+ case $l in
+ 0) eval p_${p}_s=false
+ eval p_${p}_level=\'[ ]\'
+ eval p_${p}_dus=0;;
+ 1) eval p_${p}_s=true
+ eval p_${p}_level=\'[X]\'
+ eval p_${p}_dus=\$p_${p}_du;;
+ 2) eval S=\$p_${p}_s
+ if test "$S" = "true"; then
+ eval p_${p}_s=false
+ eval p_${p}_level=\'[ ]\'
+ eval p_${p}_dus=0
+ else
+ eval p_${p}_s=true
+ eval p_${p}_level=\'[X]\'
+ eval p_${p}_dus=\$p_${p}_du
+ fi
+ ;;
+ esac
+ setlength p_${p}_dus 6
+}
+
+scheme_select()
+{
+ S=`echo $1 | sed -e 's/_/-/g' `
+ series_lang_allnone
+ series_allnone
+ for i in `grep "^-collection-" $LISTS/$S.scheme | sed -e 's/^-//' -e 's/-/_/g'`
+ do
+ series_select_level $i 1
+ done
+ selected_packages=`grep "^[+\-]" $LISTS/$S.scheme | grep -v collection- | sed -e 's/^.//' -e 's/-/_/'`
+ selected_collections=`grep "^-collection-" $LISTS/$S.scheme | sed -e 's/^-collection-//'`
+}
+
+system_selectall()
+{
+ size=0
+ for s in $all_systems; do
+ eval p_${p}_s=false
+ eval size=\`expr $size + \$p_${s}_du\`
+ eval p_${s}_s=true
+ done
+ all_systems_ns=$all_systems_anz
+ setlength all_systems_ns 2
+}
+
+system_deselectall()
+{
+ for s in $all_systems; do
+ series_select_level $s 0
+ done
+ all_systems_ns=0
+ setlength all_systems_ns 2
+}
+
+series_lang_allnone()
+{
+ for s in $all_lang_collections; do
+ series_select_level $s 0
+ done
+ series_select_level tex_basic 1
+ total_stat
+}
+
+series_lang_allall()
+{
+ for s in $all_lang_collections; do
+ series_select_level $s 1
+ done
+ total_stat
+}
+
+series_allnone()
+{
+ for s in $all_collections; do
+ series_select_level $s 0
+ done
+ series_select_level tex_basic 1
+ total_stat
+}
+
+series_allall()
+{
+ for s in $all_collections; do
+ series_select_level $s 1
+ done
+ total_stat
+}
+
+
+systems_init () {
+ $echon "Initializing system packages... "
+ all_systems=
+ anz=0
+ for s in $systems; do
+ anz=`expr $anz + 1`
+ t=`echo $s | sed 's@-@_@g; s@\.@@g'`
+ all_systems="$all_systems $t"
+ eval p_${t}_fn=$s
+ eval p_${t}_s=false
+ done
+ echo "done."
+
+ all_systems_anz=$anz
+ platform_guess
+ if test -n "$this_system"; then
+ eval p_${this_system}_s=true
+ eval this_platform_n=\$p_${this_system}_n
+ eval this_platform_fn=\$p_${this_system}_fn
+ all_systems_ns=1
+ fi
+ setlength all_systems_anz 2
+ setlength all_systems_ns 2
+ total_stat
+}
+
+select_platforms()
+{
+ changed=false
+ cls
+ echo "Available sets of binaries: ";
+ for p in $all_systems; do eval name=\"\$p_${p}_n\"; echo " $p: $name" ;done
+ echo "You can now choose to install some of these "
+ echo "Possible answers: <Y>es, <N>o, <R>eturn to main menu, <Q>uit."
+ echo ""
+ for p in $all_systems; do
+ eval name=\"\$p_${p}_n\"
+ case `getopt YNRQ "Install binaries for system [$p] $name"` in
+ Y) eval p_${p}_s=true; changed=true;;
+ N) eval p_${p}_s=false; changed=true;;
+ R) break;;
+ Q) exit_on_confirm;;
+ esac
+ done
+ $changed && { system_stat; total_stat; }
+}
+
+system_stat()
+{
+ $echon "Counting selected system packages... "
+ anz=0
+ for i in $all_systems; do
+ eval \$p_${i}_s && anz=`expr $anz + 1`
+ done
+ all_systems_ns=$anz
+ setlength all_systems_ns 2
+ echo "done."
+}
+
+nobinstat()
+{
+ $echon "Counting selected collections... "
+ anz=0
+ for i in $all_collections; do
+ eval \$p_${i}_s && anz=`expr $anz + 1`
+ done
+ for i in $all_lang_collections; do
+ eval \$p_${i}_s && anz=`expr $anz + 1`
+ done
+ all_collections_ns=$anz
+ setlength all_collections_ns 2
+ echo "done."
+
+ $echon "Calculating disk space requirements for collections..."
+ size=0
+ for i in $all_collections; do
+ eval \$p_${i}_s && eval size=\`expr $size + \$p_${i}_du\`
+ done
+ for i in $all_lang_collections; do
+ eval \$p_${i}_s && eval size=\`expr $size + \$p_${i}_du\`
+ done
+ all_collections_dus=$size
+ setlength all_collections_dus 6
+ echo "done."
+}
+
+total_stat()
+{
+ nobinstat
+ total_dus=`expr $all_collections_dus`
+ setlength total_dus 6
+}
+
+this_platform_set()
+{
+ system_deselectall
+ if test -n "$this_system"; then
+ eval p_${this_system}_s=true
+ size=0
+ eval size=\`expr $size + \$p_${this_system}_du\`
+ eval this_platform_n=\$p_${this_system}_n
+ eval this_platform_fn=\$p_${this_system}_fn
+ all_systems_ns=1
+ fi
+
+}
+
+TEXMFCNF__fix_texmf()
+{
+ #test "$TEXDIR/texmf" = "$TEXMF" && return
+ #test -w "$TEXMFCNF_DIR/texmf.cnf" || return
+ cd $work_dir || exit 1
+ #
+ LOCAL=$TEXMFLOCAL
+ if test "x$LOCAL_CHANGE" = "x1"; then
+ : # explicitly set by user.
+ elif test "x$LOCAL_CHANGE" = "x2"; then
+ # implicitly set by changing TEXDIR
+ LOCAL="\$SELFAUTOPARENT/texmf-local"
+ else
+ # no changes, meaning they took the default of /usr/local/texlive/2005,
+ # meaning we want /usr/local/texlive/texmf-local ... one level up.
+ LOCAL="\$SELFAUTOPARENT/../texmf-local"
+ fi
+ echo "Setting local tree (TEXMFLOCAL) to $LOCAL in $TEXMFCNF_DIR/texmf.cnf... " >&2
+ sed "s@^TEXMFLOCAL.*@TEXMFLOCAL=$LOCAL@" $TEXMFCNF_DIR/texmf.cnf \
+ >.sed_tmp.$$
+ #
+ VAR=$TEXMFSYSVAR
+ test "x$VAR_CHANGE" = "x" && VAR="\$SELFAUTOPARENT/texmf-var"
+ echo "Setting system var tree (TEXMFSYSVAR) to $VAR in $TEXMFCNF_DIR/texmf.cnf... " >&2
+ sed "s@^TEXMFSYSVAR.*@TEXMFSYSVAR=$VAR@" \
+ <.sed_tmp.$$ >$TEXMFCNF_DIR/texmf.cnf
+ rm .sed_tmp.$$
+ #
+ echo Done fixing texmf.cnf. >&2
+}
+
+
+TEXMFCNF__fix_fmtutil()
+{
+ echo "Configuring fmtutil.cnf from $TEXMFCNF_DIR into $TEXMFSYSVAR/web2c... " >&2
+ cd $work_dir
+ mkdirhier $TEXMFSYSVAR/web2c
+ sed "s@^\#!\#@@" $TEXMFCNF_DIR/fmtutil.cnf > $TEXMFSYSVAR/web2c/fmtutil.cnf
+}
+
+
+
+prepare_dirs()
+{
+ $echon "Preparing destination directories... " >&2
+ unset TEXMFCNF
+ unset TEXMFMAIN
+ test -d "$CDDIR" \
+ || fatal "$CDDIR does not seem to be the TeX Live distribution!"
+
+ work_dir=${TMP-/tmp}/.tmp_tlinst.$$
+ ERRLOG=$work_dir/.errlog.$$
+
+ trap "cd /; rm -rf $work_dir $TEXDIR/texmf/.tmp_testfile.$$;trap '' 0; exit 0" 0 1 2 15
+
+ alldirs="$TMPDIR $TEXDIR $TEXMFSYSVAR $TEXMF $work_dir $opt_symlinks_bin $opt_symlinks_info"
+ test -z "$TEXMFSYSVAR" ||
+ alldirs="$alldirs $TEXMFSYSVAR/fonts/pk $TEXMFSYSVAR/fonts/tfm"
+ test -z "$opt_varfonts_dir" ||
+ alldirs="$alldirs $opt_varfonts_dir/pk $opt_varfonts_dir/tfm"
+ for dir in $alldirs; do
+ while test ! -d $dir || test ! -w $dir; do
+ mkdirhier $dir
+ test -d $dir || { warn "could not make directory '$dir'"; continue; }
+ test -w $dir || { warn "cannot write to directory '$dir'"; continue; }
+ done
+ done
+ test -z "$TEXMFSYSVAR" || chmod -R a+w $TEXMFSYSVAR ||
+ warn "command 'chmod -R a+w $TEXMFSYSVAR' failed"
+ test -z "$opt_varfonts_dir" ||
+ chmod 1777 $opt_varfonts_dir/pk $opt_varfonts_dir/tfm ||
+ warn "command 'chmod 1777 $opt_varfonts_dir/pk $opt_varfonts_dir/tfm' failed"
+
+ echo "done preparing." >&2
+ if test $all_systems_ns = 1; then
+ cls
+ textvar_show screen_6
+ echo
+ fi
+}
+
+make_var_skeleton ()
+{
+ mkdirhier $TEXMFSYSVAR/tex/generic/config
+ mkdirhier $TEXMFSYSVAR/dvipdfm/config
+ mkdirhier $TEXMFSYSVAR/tex/plain/config
+ mkdirhier $TEXMFSYSVAR/dvips/config
+ mkdirhier $TEXMFSYSVAR/fonts/map/dvipdfm/updmap
+ mkdirhier $TEXMFSYSVAR/fonts/map/dvips/updmap
+ mkdirhier $TEXMFSYSVAR/fonts/map/pdftex/updmap
+ mkdirhier $TEXMFSYSVAR/web2c
+ mkdirhier $TEXMFSYSVAR/xdvi
+ mkdirhier $TEXMFSYSVAR/tex/context/config
+}
+
+make_local_skeleton ()
+{
+ # skeleton local hierarchy
+ mkdirhier $TEXMFLOCAL/tex/latex/local
+ mkdirhier $TEXMFLOCAL/tex/plain/local
+ mkdirhier $TEXMFLOCAL/dvips/local
+ mkdirhier $TEXMFLOCAL/bibtex/bib/local
+ mkdirhier $TEXMFLOCAL/bibtex/bst/local
+ mkdirhier $TEXMFLOCAL/fonts/tfm/local
+ mkdirhier $TEXMFLOCAL/fonts/vf/local
+ mkdirhier $TEXMFLOCAL/fonts/source/local
+ mkdirhier $TEXMFLOCAL/fonts/type1/local
+ mkdirhier $TEXMFLOCAL/metapost/local
+ mkdirhier $TEXMFLOCAL/web2c
+}
+
+
+maketex_setoptfonts()
+{
+ test -w "$TEXMFCNF_DIR/texmf.cnf" || return
+ test "$opt_varfonts" = X || return
+ $echon "Setting VARFONTS in texmf.cnf... " >&2
+ ed "$TEXMFCNF_DIR/texmf.cnf" >$ERRLOG 2>&1 <<eof
+/^VARTEXFONTS.*=/
+c
+VARTEXFONTS = $opt_varfonts_dir
+.
+w
+q
+eof
+ show_error
+ echo "Done setting varfonts." >&2
+
+ mtsite=$TEXMFCNF_DIR/mktex.cnf
+ chmod u+w $mtsite
+ test -w "$mtsite" || return
+ show_error
+ $echon "Adding varfonts feature in $mtsite... " >&2
+ ed "$mtsite" >$ERRLOG 2>&1 <<'eof'
+/MT_FEATURES=appendonlydir/
+s/dir/dir:varfonts/
+w
+q
+eof
+ show_error
+ echo "Done adding varfonts." >&2
+}
+
+greetings()
+{
+ cat <<ENDG
+
+See ./index.html for links to documentation.
+The TeX Live web site (http://tug.org/texlive/)
+contains any updates and corrections.
+
+TeX Live is a joint project of the TeX user groups around the world;
+please consider supporting it by joining the group best for you.
+The list of groups is available on the web at
+http://tug.org/usergroups.html.
+
+Welcome to TeX Live!
+
+ENDG
+}
+
+opt_do_symlinks()
+{
+ test "$opt_symlinks" = X || return
+
+ $echon 'Creating symbolic links...'
+ texdocdir=$TEXDIR/texmf/doc
+
+ # Dynamically see which man sections we have.
+ mans=`(cd $texdocdir/man && echo *)`
+ test -z "$mans" && return # unlikely but possible
+ #
+ for m in $mans; do
+ mandir=$texdocdir/man/$m
+ test -d $mandir || continue # in case a README or something sneaks in.
+
+ mkdirhier $opt_symlinks_man/$m
+ test ! -w $opt_symlinks_man/$m && continue
+
+ $echon " $m"
+ cd $opt_symlinks_man/$m || continue
+ rm -f `ls $mandir`
+ ln -s $mandir/* .
+ done
+
+ # no subdirs for info.
+ infodir=$texdocdir/info
+ if test -w "$opt_symlinks_info"; then
+ $echon " info"
+ if cd $opt_symlinks_info; then
+ rm -f `ls $infodir`
+ ln -s $infodir/*info* .
+ fi
+ fi
+
+ this_platform_bin=
+ if test -x $TEXDIR/bin/tex; then
+ this_platform_bin=$TEXDIR/bin
+ elif test -x $TEXDIR/bin/$this_platform_fn/tex; then
+ this_platform_bin=$TEXDIR/bin/$this_platform_fn
+ fi
+ if test -n "$this_platform_bin"; then
+ $echon " binaries"
+ $debug && echo " (target $this_platform_bin)"
+ if cd $opt_symlinks_bin; then
+ rm -f `ls $this_platform_bin`
+ ln -s $this_platform_bin/* .
+ fi
+ fi
+
+ echo ' ... done linking.'
+}
+
+################################################################
+# menus:
+################################################################
+menu_main()
+{
+ while true; do
+ cls
+ opt_savespace_man=X
+ echo; textvar_show screen_1; echo
+ case `getopt BCSDLOIHPQR 'Enter command'` in
+ C) menu_series_customize;;
+ L) menu_lang_series_customize;;
+ D) menu_directories;;
+ H) helpme help_1;;
+ I) install_now;;
+ O) menu_options;;
+ P) menu_this_platform;;
+ Q) exit_on_confirm;;
+ R) install_cd;;
+ B) select_platforms;;
+ S) menu_schemes;;
+ esac
+ done
+}
+
+
+# NEW PLATFORM: change getopt call and add a new case.
+menu_this_platform()
+{
+ while true; do
+ cls
+ textvar_show screen_5; echo
+ case `getopt NABCDEFGHIJRQ 'Select the platform you are currently on'` in
+ N) this_system=''; this_platform_set ;;
+ A) this_system=i386_linux; this_platform_set ;;
+ B) this_system=win32; this_platform_set ;;
+ C) this_system=powerpc_darwin; this_platform_set ;;
+ D) this_system=i386_darwin; this_platform_set ;;
+ E) this_system=alpha_linux; this_platform_set ;;
+ F) this_system=mips_irix; this_platform_set ;;
+ G) this_system=powerpc_aix; this_platform_set ;;
+ H) this_system=sparc_solaris; this_platform_set ;;
+ I) this_system=i386_freebsd; this_platform_set ;;
+ J) this_system=x86_64_linux; this_platform_set ;;
+ K) this_system=sparc_linux; this_platform_set ;;
+ R) total_stat; return ;;
+ Q) exit_on_confirm ;;
+ esac
+ done
+}
+
+
+# This run for scheme selection <S>.
+menu_schemes()
+{
+ while true; do
+ cls
+ for i in $all_schemes
+ do
+ eval key=\"\$schemes_${i}_ident\"
+ eval name=\"\$schemes_${i}_n\"
+ echo $key $name
+ done | pr -t -2 -
+ echo
+ echo Current scheme is [$selected_scheme].
+ echo "[Collections: $selected_collections]" | sed 's/tex_//g' | fmt
+ echo "[Packages: $selected_packages]" | sed 's/tex_//g' | fmt
+ echo
+ echo ' Press <R> to return to main menu, <Q> to quit'
+ K=`getopt ABCDEFGHIJKLMNOPQRSTUVWXYZ ' or press key to select a scheme'`
+ case $K in
+ R) total_stat; return ;;
+ Q) exit_on_confirm;;
+ *) eval W=\"\$SCHEMES_${K}\"
+ selected_scheme=$W
+ scheme_select $W
+ total_stat; return;;
+ esac
+ done
+}
+
+menu_series_customize()
+{
+ while true; do
+ cls
+ for i in $all_collections
+ do
+ eval status=\"\$p_${i}_level\"
+ eval key=\"\$p_${i}_ident\"
+ eval name=\"\$p_${i}_n\"
+ echo $key $status $name
+ done | pr -t -3 -
+ textvar_show screen_customize; echo
+ K=`getoptallcase -+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@ 'Press key to toggle status of collection'`
+ case $K in
+ +) series_allall;;
+ -) series_allnone;;
+ R) total_stat; return ;;
+ Q) exit_on_confirm;;
+ r) total_stat; return ;;
+ q) exit_on_confirm;;
+ *) eval W=\"\$P_${K}\"
+ series_select_level $W 2;
+ esac
+ done
+}
+
+menu_lang_series_customize()
+{
+ while true; do
+ cls
+ for i in $all_lang_collections
+ do
+ eval status=\"\$p_${i}_level\"
+ eval key=\"\$p_${i}_ident\"
+ eval name=\"\$p_${i}_n\"
+ echo $key $status $name
+ done | pr -t -2 -
+ textvar_show screen_customize; echo
+ K=`getoptallcase -+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@ 'Press key to toggle status of collection'`
+ case $K in
+ +) series_lang_allall;;
+ -) series_lang_allnone;;
+ R) total_stat; return ;;
+ Q) exit_on_confirm;;
+ r) total_stat; return ;;
+ q) exit_on_confirm;;
+ *) eval W=\"\$LP_${K}\"
+ series_select_level $W 2;
+ esac
+ done
+}
+
+
+menu_directories()
+{
+ while true; do
+ cls
+ textvar_show screen_2; echo
+ case `getopt 123RQ 'Enter command'` in
+ 1) gets TEXDIR; TEXDIR=`dirname "$TEXDIR/x" | sed 's@//*@/@g'`
+ TEXMF=`echo $TEXDIR/texmf | sed 's@//*@/@g'`
+ TEXMFLOCAL=`echo $TEXDIR/texmf-local`
+ LOCAL_CHANGE=2
+ TEXMFSYSVAR=`echo $TEXDIR/texmf-var`
+ ;;
+ 2) gets TEXMFLOCAL
+ TEXMFLOCAL=`dirname "$TEXMFLOCAL/x" | sed 's@//*@/@g'`
+ LOCAL_CHANGE=1
+ ;;
+ 3) gets TEXMFSYSVAR; VAR_CHANGE=1; TEXMFSYSVAR=`dirname "$TEXMFSYSVAR/x" | sed 's@//*@/@g'`;;
+ R) return;;
+ Q) exit_on_confirm;;
+ esac
+ done
+}
+
+menu_options()
+{
+ while true; do
+ cls
+ textvar_show screen_3; echo
+ case `getopt ADFLRSQ 'Enter command'` in
+ A) toggle opt_varfonts
+ if test "$opt_varfonts" = X; then
+ cls; textvar_show screen_3; echo
+ opt_varfonts_dir=$opt_varfonts_dir_last
+ test -z "$opt_varfonts_dir" && opt_varfonts_dir=/tmp/texfonts
+ gets opt_varfonts_dir 'alternate directory'
+ else
+ opt_varfonts_dir_last=$opt_varfonts_dir
+ opt_varfonts_dir=''
+ fi
+ ;;
+ S) toggle opt_source
+ if test "$opt_source" = X; then
+ cls; textvar_show screen_3; echo
+ fi
+ ;;
+ D) toggle opt_doc
+ if test "$opt_doc" = X; then
+ cls; textvar_show screen_3; echo
+ fi
+ ;;
+ L) toggle opt_symlinks
+ if test "$opt_symlinks" = X; then
+ cls; textvar_show screen_3; echo
+ opt_symlinks_bin=$opt_symlinks_bin_last
+ test -z "$opt_symlinks_bin" && opt_symlinks_bin=/usr/bin
+ gets opt_symlinks_bin 'binary directory'
+ opt_symlinks_man=$opt_symlinks_man_last
+ test -z "$opt_symlinks_man" && opt_symlinks_man=`dirname $opt_symlinks_bin`/man
+ gets opt_symlinks_man 'man directory '
+ opt_symlinks_info=$opt_symlinks_info_last
+ test -z "$opt_symlinks_info" && opt_symlinks_info=`dirname $opt_symlinks_bin`/info
+ gets opt_symlinks_info 'info directory '
+ else
+ opt_symlinks_bin_last=$opt_symlinks_bin
+ opt_symlinks_man_last=$opt_symlinks_man
+ opt_symlinks_info_last=$opt_symlinks_info
+ opt_symlinks_bin=''; opt_symlinks_man=''; opt_symlinks_info=''
+ fi
+ ;;
+ R) return;;
+ Q) exit_on_confirm;;
+ esac
+ done
+}
+
+exit_on_confirm()
+{
+ cls
+ yesno 'Really quit' && exit
+}
+
+################################################################
+# global variables
+################################################################
+: ${PAGER=more}
+envvars='
+BIBINPUTS BSTINPUTS DVIPSHEADERS GFFONTS GLYPHFONTS MFBASES MFINPUTS
+MFPOOL PKFONTS TEXCONFIG TEXFONTS TEXFORMATS TEXINPUTS TEXMFCNF TEXPICTS
+TEXPKS TEXPOOL TFMFONTS VFFONTS DVIPSFONTS XDVIVFS XDVIFONTS DVILJFONTS
+'
+TARPROG=tar
+TAROPT=""
+varprefix='/var'
+usrprefix='/usr'
+opt_varfonts=' '
+opt_vartexmf=' '
+opt_source=' '
+opt_doc=' '
+opt_varfonts_dir=''
+opt_vartexmf_dir=''
+opt_varfonts_dir_last=''
+opt_vartexmf_dir_last=''
+opt_symlinks=' '
+opt_symlinks_bin=''
+opt_symlinks_man=''
+opt_symlinks_info=''
+opt_symlinks_bin_last=''
+opt_symlinks_man_last=''
+opt_symlinks_info_last=''
+
+this_platform=
+
+################################################################
+# screens:
+################################################################
+
+screen_2='Current directories setup:
+==============================================================================
+
+ <1> TEXDIR: $TEXDIR
+ support tree: $TEXMF
+
+ <2> TEXMFLOCAL: $TEXMFLOCAL
+
+ <3> TEXMFSYSVAR: $TEXMFSYSVAR
+
+Other options:
+==============================================================================
+ <R> return to main menu
+ <Q> quit
+'
+
+screen_3='Current options setup:
+==============================================================================
+
+ <A> alternate directory for automatically generated fonts: [$opt_varfonts]
+ directory name: $opt_varfonts_dir
+ <L> create symlinks in standard directories: [$opt_symlinks]
+ binaries to: $opt_symlinks_bin
+ manpages to: $opt_symlinks_man
+ info to: $opt_symlinks_info
+ <D> do not install font/macro doc tree: [$opt_doc]
+ <S> do not install font/macro source tree: [$opt_source]
+
+Other options:
+==============================================================================
+ <R> return to main menu
+ <Q> quit
+'
+
+screen_5='Current platform: $this_platform_n
+==============================================================================
+ <N> none of the entries below
+ <A> $p_i386_linux_n
+ <B> $p_win32_n
+ <C> $p_powerpc_darwin_n
+ <D> $p_i386_darwin_n
+ <E> $p_alpha_linux_n
+ <F> $p_mips_irix_n
+ <G> $p_powerpc_aix_n
+ <H> $p_sparc_solaris_n
+ <I> $p_i386_freebsd_n
+ <J> $p_x86_64_linux_n
+ <K> $p_sparc_linux_n
+
+ <R> return to main menu
+ <Q> quit
+'
+
+
+screen_6='TeX Live can be used on multiple systems
+as a separate subdirectory is used for each
+installed binary package in $TEXDIR/bin.'
+
+screen_customize='
+ <-> deselect all <+> select all <R> return to main menu <Q> quit
+'
+
+system_screen='System setup section
+==============================================================================
+Current selection: $all_systems_ns out of $all_systems_anz
+
+==============================================================================
+ <R> return to platform menu
+ <Q> quit
+'
+
+help_1='
+This is the installation program of the TeX Live distribution.
+
+The installation procedure is simple: just go through the
+menus until you are happy with the way all options are set up,
+and then do <I> (start installation).
+
+To select a menu item (a letter or a number marked with brackets)
+just enter the corresponding letter or number and press return
+(the letters are case insensitive except when collections
+are being selected). Do not enter the
+angle brackets <> themselves.
+
+We will now consider each menu item in more detail:
+
+======================================================================
+ The collections menu (<C>)
+======================================================================
+
+The collections menu allows you to select and deselect standard
+collections. Each collection --- TeX macro files, Metafont font
+families, and so on --- consists of several packages.
+
+======================================================================
+ The language collections menu (<L>)
+======================================================================
+
+The language collections menu allows you to select and deselect
+language support collections. Each collection consists of several
+packages, which provide features like hyphenation files and fonts.
+
+======================================================================
+ The binary systems menu (<B>)
+======================================================================
+
+The systems menu allows you to select and deselect
+the binary packages for various different platforms.
+
+======================================================================
+ The directories menu (<D>)
+======================================================================
+
+The TeX Live distribution will be installed in a single directory tree
+(TEXDIR). You may choose any directory you like
+since there are no absolute paths compiled into the binaries. Instead,
+the Kpathsea library selfdir feature ensures that all
+paths are relative to the location of the binaries.
+
+The platform independent files are stored in a directory tree in
+TEXDIR/texmf. There is also an extra directory for performing
+administrative tasks like change of configuration and languages. This
+is where all format files are stored. It defaults to TEXDIR/texmf-var.
+
+This system allows you to mount your
+TEXDIR/texmf tree read-only.
+
+======================================================================
+ The options menu (<O>)
+======================================================================
+
+The options are not applicable to all installations. Set them as
+appropriate for yours.
+
+======================================================================
+ The schemes menu (<S>)
+======================================================================
+
+You can choose from a number of different installation
+schemes for TeX Live. Selecting one of these selects
+some collections in the Collections and Languages lists.
+which you can subsequently modify.
+
+"alternate fonts directory":
+============================
+
+You can choose an alternate directory for automatically generated fonts;
+the default is TEXMFSYSVAR/fonts
+
+One disadvantage may be that new fonts are not shared. I.e., if you
+set this to /tmp, and users on two different machines need the same
+font, it will be built twice, once on each machine.
+
+"symlinks in standard directories"
+==================================
+
+You can make the binaries, man pages, and info files available on your
+system in either (or both) of two ways:
+ 1) install them in "standard places" that are searched for these files
+ 2) change your search paths to include the new directories
+
+If you select the "symlinks" option, symbolic links will be installed in
+the directories you choose. Note that if you share the TeX Live installation
+accross several machines across NFS and if the chosen "standard places" are
+not shared, you need to create the symbolic links on each client, too
+(or use method 2 on your clients).
+
+If you do not use the "symlinks" option, you probably need to set up
+your search paths (PATH, MANPATH, INFOPATH).
+
+"do not install doc or source trees"
+====================================
+These options are not recommended, but you can use them to save space.
+Normally all packages are installed with the source and/or documentation,
+but these are not needed to actually run the software. If you
+are installing a system for other people, it would be unfriendly to
+select these options; if you know what you are doing and need a
+minimal disk footprint, go ahead
+
+
+======================================================================
+ Other commands (<I>, <H>, <R> and <Q>
+======================================================================
+
+Well, this is easy to explain:
+ <R> does not install the system, but sets you to run off the CD
+ <I> starts the installation after you are happy with the setup
+ <H> displays this help
+ <Q> quits the installation program
+'
+
+init()
+{
+ #$debug && set -x
+ echo "Welcome to TeX Live installation. (`date`)"; echo
+ locate_binaries
+ bad_sh
+ find_echo
+ find_tar
+ series_init
+ bindir=
+ tex_prefix=/usr/local/texlive
+ TEXDIR=$tex_prefix/2005 # manually update each year!
+ TEXMFSYSVAR=$TEXDIR/texmf-var
+ TEXMF=$TEXDIR/texmf
+ TEXMFLOCAL=$tex_prefix/texmf-local
+ VAR_CHANGE=""
+ LOCAL_CHANGE=""
+
+screen_1=' ===================> TeX Live installation procedure <==================
+
+===> Note: Letters/digits in <angle brackets> indicate menu items <===
+===> for commands or configurable options <===
+
+ Proposed platform: $this_platform_n
+ <P> override system detection and choose platform
+ <B> binary systems: $all_systems_ns out of $all_systems_anz
+ <S> Installation scheme ($selected_scheme)
+ [to customize within installation scheme:
+ <C> standard collections <L> language collections]
+ $all_collections_ns out of $all_collections_anz, disk space required: $all_collections_dus kB
+ <D> directories:
+ TEXDIR (main TeX directory) : $TEXDIR
+ TEXMFLOCAL (for local styles etc.): $TEXMFLOCAL
+ TEXMFSYSVAR (for local config) : $TEXMFSYSVAR
+ <O> options:
+ [$opt_varfonts] alternate directory for generated fonts ($opt_varfonts_dir)
+ [$opt_symlinks] create symlinks in standard directories
+ [$opt_doc] do not install macro/font doc tree
+ [$opt_source] do not install macro/font source tree
+ <R> do not install files, set up to run off CD or DVD
+ <I> start installation
+ <H> help, <Q> quit
+'
+
+}
+
+list_zipped_files()
+{
+ col=`echo $1 | sed 's/_/-/g'`
+ $debug && echo " -> collection $col" >&2
+ morecols=`grep -- "^-" $LISTS/$col | sed 's/.//'`
+ packages=`grep "^+" $LISTS/$col | sed 's/.//'`
+ :>$work_dir/tmp.text
+ :>$work_dir/$col.jobs
+ echo "$col.zip" >> $work_dir/tmp.text
+ eval sort < $LISTS/$col | grep '^\!' | tr ' ' '=' >> $work_dir/$col.jobs
+ if test "x$packages" != "x"
+ then
+ for i in $packages
+ do
+ expand_package $i $col
+ done
+ fi
+ eval sort -u $work_dir/tmp.text >> $work_dir/$col.list.text
+
+
+ rm $work_dir/tmp.text
+
+ if test "x$morecols" != "x"
+ then
+ for p in $morecols
+ do
+ list_zipped_files $p
+ done
+ fi
+
+}
+
+expand_package ()
+{
+ pack=$1
+ col=$2
+ $debug && echo " expand package $pack" >&2
+ echo "$pack.zip" >> $work_dir/tmp.text
+ eval sort < $LISTS/$pack | grep '^\!' | tr ' ' '=' >> $work_dir/$col.jobs
+ more=`grep "^+" $LISTS/$pack | sed 's/.//'`
+ if test "x$more" != "x"
+ then
+ for i in $more
+ do
+ expand_package $i $col
+ done
+ fi
+}
+
+
+# at the beginning of the end ... called at the beginning of install_new.
+# the caller must set list_file_func and list_package_func.
+#
+common_start_install()
+{
+ prepare_dirs
+ make_local_skeleton
+ make_var_skeleton
+
+ skip_systemstuff=false
+ TEXMFCNF_DIR=$TEXDIR/texmf/web2c
+ test -f $TEXMFCNF_DIR/texmf.cnf && skip_systemstuff=true
+
+ #
+ cat >$TEXMFSYSVAR/web2c/updmap.cfg <<OAF
+# created during TeX Live installation, `date`.
+################################################################
+# OPTIONS
+################################################################
+#
+# dvipsPreferOutline
+#
+# Should dvips (by default) prefer bitmap fonts or outline fonts
+# if both are available? Independent of this setting, outlines
+# can be forced by putting "p psfonts_t1.map" into a config file
+# that dvips reads. Bitmaps (for the fonts in question) can
+# be forced by putting "p psfonts_pk.map" into a config file.
+# We provide such config files which can be enabled via
+# dvips -Poutline ... resp. dvips -Ppk ...
+#
+# Valid settings for dvipsPreferOutline are true / false:
+dvipsPreferOutline true
+
+#
+# LW35
+#
+# Which fonts for the "Basic 35 Laserwriter Fonts" do you want to use and
+# how are the filenames chosen? Valid settings:
+# URW: URW fonts with "vendor" filenames (e.g. n019064l.pfb)
+# URWkb: URW fonts with "berry" filenames (e.g. uhvbo8ac.pfb)
+# ADOBE: Adobe fonts with "vendor" filenames (e.g. hvnbo___.pfb)
+# ADOBEkb: Adobe fonts with "berry" filenames (e.g. phvbo8an.pfb)
+LW35 URWkb
+
+#
+# dvipsDownloadBase35
+#
+# Should dvips (by default) download the standard 35 LaserWriter fonts
+# with the document (then set dvipsDownloadBase35 true) or should these
+# fonts be used from the ps interpreter / printer?
+# Whatever the default is, the user can override it by specifying
+# dvips -Pdownload35 ... resp. dvips -Pbuiltin35 ... to either download
+# the LW35 fonts resp. use the built-in fonts.
+#
+# Valid settings are true / false:
+dvipsDownloadBase35 false
+
+#
+# pdftexDownloadBase14
+#
+# Should pdftex download the base 14 pdf fonts? Since some configurations
+# (ps / pdf tools / printers) use bad default fonts, it is safer to download
+# the fonts. The pdf files will get bigger, though.
+# Valid settings are true (download the fonts) or false (don't download
+# the fonts). Adobe recomments to embed all fonts.
+pdftexDownloadBase14 true
+
+#
+# dvipdfmDownloadBase14
+#
+# Should dvipdfm download the base 14 pdf fonts? Since some configurations
+# (ps / pdf tools / printers) use bad default fonts, it is safer to download
+# the fonts. The pdf files will get bigger, though.
+# Valid settings are true (download the fonts) or false (don't download
+# the fonts).
+dvipdfmDownloadBase14 true
+
+################################################################
+# Map files.
+################################################################
+#
+# There are two possible entries: Map and MixedMap. Both have one additional
+# argument: the filename of the map file. MixedMap ("mixed" means that
+# the font is available as bitmap and as outline) lines will not be used
+# in the default map of dvips if dvipsPreferOutline is false. Inactive
+# Map files should be marked by "#! " (without the quotes), not just #.
+#
+# (comments on a few map files from the teTeX updmap.cfg; for TeX Live,
+# the actual Map lines are created during installation.)
+#
+# AntykwaPoltawskiego; CTAN:fonts/psfonts/polish/antp/
+#
+# AntykwaTorunska; CTAN:fonts/antt/
+#
+# "quasi" fonts derived from URW and enhanced (from the Polish TeX users);
+# CTAN:fonts/psfonts/polish/qfonts/
+#
+# Bitstream Charter text font
+#
+# Computer Modern fonts extended with Russian letters;
+# CTAN:fonts/cyrillic/cmcyr/
+#
+# symbols for ConTeXt macro package
+#
+# latin modern; CTAN:fonts/lm.
+#
+# a symbol font; CTAN:fonts/psfonts/marvosym/
+#
+# two font map entries for the mathpple package
+#
+# for Omega
+#
+# the pazo fonts; CTAN:fonts/mathpazo
+#
+# pxfonts (palatino extension); CTAN:fonts/pxfonts
+#
+# txfonts (times extension); CTAN:fonts/txfonts
+#
+# XY-pic fonts; CTAN:macros/generic/diagrams/xypic
+#
+# 7-8-9 sizes for cmex taken from TeXtrace2001 different implementation
+# for font entries found in ams-cmex-bsr-interpolated.map and
+# cmother-bsr-interpolated.map.
+#
+# ps-type1 versions for ams; CTAN:fonts/amsfonts/ps-type1
+#
+# ps-type1 versions for cm; CTAN:fonts/cm/ps-type1/bluesky
+#
+# CSTeX; http://math.feld.cvut.cz/olsak/cstex/
+#
+# mf -> type1 converted fonts by Taco Hoekwater
+#
+# Polish version of Computer Modern; CTAN:language/polish/plpsfont
+#
+# Polish version of Computer Concrete; CTAN:fonts/psfonts/polish/cc-pl
+#
+# See comments in doc/fonts/belleek/README about using mt-belleek.map
+# instead of mt-yy.map:
+#
+# Euro Symbol fonts by Henrik Theiling; CTAN:fonts/eurosym
+#
+# vntex support, see http://vntex.org/
+#
+# Doublestroke, based on Knuth's Computer Modern Roman; CTAN:fonts/doublestroke
+#
+# FPL, free substitutes for the commercial Palatino SC/OsF fonts
+# are available from CTAN:fonts/fpl; used by psnfss 9.2.
+OAF
+ (
+ echo "Preparing list of files to be installed..." >&2
+ $debug && echo "debug:for selected systems:" >&2
+ for p in $all_systems; do
+ $debug && echo "debug: checking system $p_${p}_s..."
+ eval \$p_${p}_s || continue
+ eval name=\"\$p_${p}_n\"
+ echo " $name" >&2
+ done
+ echo >&2
+
+ $debug && echo "debug:for selected collections:" >&2
+ for p in $all_collections; do
+ $debug && echo "debug: checking coll $p_${p}_s..."
+ eval \$p_${p}_s || continue
+ eval name=\"\$p_${p}_n\"
+ echo " $name ">&2
+ $list_file_func $p
+ done
+ echo >&2
+
+ $debug && echo "debug:for selected language collections:" >&2
+ for p in $all_lang_collections; do
+ $debug && echo "debug: checking lang coll $p_${p}_s..."
+ eval \$p_${p}_s || continue
+ eval name=\"\$p_${p}_n\"
+ echo " $name ">&2
+ $list_file_func $p
+ done
+
+ # e.g., GUST scheme depends on some individual packages, not just
+ # collections. Write info for those to a special .list file.
+ # (Ignored for compressed installation.)
+ $debug && echo "debug:for selected packages:" >&2
+ :>$work_dir/PKGONLY.list
+ for p in $selected_packages; do
+ $list_package_func $p PKGONLY
+ done
+ )
+}
+
+
+# at the end of the end ... this routine does not return.
+#
+common_end_install()
+{
+ test -n "$platform_subdir_strip_d" && rm -f $TEXDIR/bin/$platform_subdir_strip_d 2>/dev/null
+
+ if test "x$TEXMF" != "x$TEXDIR/texmf"; then
+ $echon "Fixing permissions in $TEXMF... " >&2
+ chmod -R a+r,u+w,go-w $TEXMF 2>/dev/null
+ rm -f $TEXDIR/texmf
+ echo "done." >&2
+ fi
+ $echon "Fixing permissions in $TEXDIR... " >&2
+ chmod -R a+r,u+w,go-w $TEXDIR 2>/dev/null
+ test -z "$TEXMFSYSVAR" ||
+ chmod -R a+w $TEXMFSYSVAR ||
+ warn "command 'chmod 1777 $TEXMFSYSVAR' failed"
+ echo "done." >&2
+
+ if test "$opt_varfonts" = X; then
+ $echon "$opt_varfonts_dir will be used for font creation... " >&2
+ else
+ $echon "Setting up directories for automatic font creation... " >&2
+ find "$TEXMF/fonts/pk" "$TEXMF/fonts/tfm" "$TEXMF/fonts/source/jknappen" -type d \
+ -print 2>/dev/null | $XARGS chmod 1777 2>/dev/null
+ fi
+ find "$TEXMF/fonts/source/jknappen" -type d -print 2>/dev/null | $XARGS chmod 1777 2>/dev/null
+ echo "done." >&2
+
+ $skip_systemstuff || maketex_setoptfonts
+ $skip_systemstuff || TEXMFCNF__fix_fmtutil
+ $skip_systemstuff || TEXMFCNF__fix_texmf
+ pd=$this_platform_fn
+ bindir=
+ have_system=false
+ echo Testing for $TEXDIR/bin/$pd/texconfig.... >&2
+ if test -x $TEXDIR/bin/$pd/texconfig; then
+ have_system=true
+ bindir=$TEXDIR/bin/$pd
+ elif test -x $TEXDIR/bin/texconfig; then
+ have_system=true
+ bindir=$TEXDIR/bin
+ fi
+ $skip_systemstuff && have_system=false
+ $skip_systemstuff || opt_do_symlinks
+ $skip_systemstuff && echo "System updated successfully." >&2
+ if $have_system; then
+ runsetup
+ echo
+ echo "Add $bindir" >&2
+ echo " to your PATH for current and future sessions." >&2
+ fi
+
+ $skip_systemstuff || greetings
+
+ if $skip_systemstuff; then
+ echo Since you already had files in $TEXDIR/texmf-dist/web2c
+ echo We have not touched anything there. Please review your setup.
+ fi
+ exit
+}
+
+
+# called from runsetup.
+#
+post_install_jobs ()
+{
+ $debug && echo "debug:do post_install_jobs " >&2
+ for j in `sort -u $work_dir/*.jobs`
+ do
+ command=`echo $j | sed 's/.\(.*\)=.*/\1/'`
+ parameter=`echo $j | sed 's/.*=\(.*\)/\1/'`
+ echo " EXECUTE $j: $command on $parameter" >&2
+ case $command in
+ addMap)
+ echo "Map $parameter" >> $TEXMFSYSVAR/web2c/updmap.cfg;;
+ addMixedMap)
+ echo "MixedMap $parameter" >> $TEXMFSYSVAR/web2c/updmap.cfg;;
+ addDvipsMap)
+ echo "p +$parameter" >> $TEXMFSYSVAR/dvips/config/config.ps;;
+ addDvipdfmMap)
+ test -f $TEXMFSYSVAR/dvipdfm/config/config && echo "f $parameter" >> $TEXMFSYSVAR/dvipdfm/config/config;
+ ;;
+ esac
+done
+}
+
+
+# subroutine called from common_end_setup.
+#
+runsetup()
+{
+ PATH=$bindir:/bin:/usr/bin
+ export PATH
+ if test -f $TEXMFSYSVAR/tex/generic/config/language.dat
+ then
+ echo Using language.dat from TeX Live distribution. >&2
+ else
+ echo Making language.dat in $TEXMFSYSVAR/tex/generic/config >&2
+ echo " from your language selections..." >&2
+ # if lang.dat's installed (basic scheme), don't mention missing files.
+ langsel=$TEXDIR/texmf/tex/generic/config/language.*.dat
+ test -n "`ls $langsel 2>/dev/null`" || langsel=
+ mkdirhier $TEXMFSYSVAR/tex/generic/config
+ cat $TEXDIR/texmf/tex/generic/config/language.us $langsel \
+ >$TEXMFSYSVAR/tex/generic/config/language.dat
+ fi
+
+ # Update ls-R before running texconfig, or modes.mf et al. may not be found.
+ echo Updating filename database with mktexlsr... >&2
+ $bindir/mktexlsr
+
+ echo "Doing post-install jobs from the packages..."
+ post_install_jobs
+
+ echo "Making map files for dvips, pdftex, dvipdfm with updmap..." >&2
+ $bindir/updmap-sys --nohash --quiet \
+ --cnffile=$TEXMFSYSVAR/web2c/updmap.cfg \
+ --dvipsoutputdir=$TEXMFSYSVAR/fonts/map/dvips/updmap \
+ --dvipdfmoutputdir=$TEXMFSYSVAR/fonts/map/dvipdfm/updmap \
+ --pdftexoutputdir=$TEXMFSYSVAR/fonts/map/pdftex/updmap
+
+ echo "Re-updating filename database with mktexlsr..." >&2
+ $bindir/mktexlsr
+
+ cat <<ENDC
+
+=========================
+Installation is finished. (`date`)
+
+For future global configuration, edit files in $TEXMFSYSVAR
+(or run texconfig or texconfig-sys).
+
+ENDC
+}