summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-16 00:05:12 +0000
committerKarl Berry <karl@freefriends.org>2006-01-16 00:05:12 +0000
commit70f7efeb5c9965a63a4143ad1c1f473585dc364c (patch)
treebf734c5c492ca5491ffaeb2192cdb9b32f42f726
parentf896f9e413c0dc0d4178846634963c84505e5029 (diff)
mswin32/
git-svn-id: svn://tug.org/texlive/trunk@1482 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/mswin32/add-info-toc.pl60
-rw-r--r--Build/source/mswin32/build.bat44
-rw-r--r--Build/source/mswin32/build.pl452
-rw-r--r--Build/source/mswin32/conf-cauto.pl54
-rw-r--r--Build/source/mswin32/configure.pl767
-rw-r--r--Build/source/mswin32/diff.exclude78
-rw-r--r--Build/source/mswin32/fix-depend.pl66
-rw-r--r--Build/source/mswin32/fix-eol.bat8
-rw-r--r--Build/source/mswin32/fix-rman.pl32
-rw-r--r--Build/source/mswin32/fix-win32.bat4
-rw-r--r--Build/source/mswin32/global-replace.pl150
-rw-r--r--Build/source/mswin32/minimal-perl.pl86
-rw-r--r--Build/source/mswin32/modes-to-cfg.pl44
-rw-r--r--Build/source/mswin32/newbuild.pl386
-rw-r--r--Build/source/mswin32/p4update.pl140
-rw-r--r--Build/source/mswin32/place.pl248
-rw-r--r--Build/source/mswin32/setvars.bat11
-rw-r--r--Build/source/mswin32/sync.pl181
-rw-r--r--Build/source/mswin32/tar-links.pl103
-rw-r--r--Build/source/mswin32/tldiff.bat8
-rw-r--r--Build/source/mswin32/update.pl171
-rw-r--r--Build/source/mswin32/xemtex-files.txt1135
22 files changed, 4228 insertions, 0 deletions
diff --git a/Build/source/mswin32/add-info-toc.pl b/Build/source/mswin32/add-info-toc.pl
new file mode 100644
index 00000000000..4cd9899170b
--- /dev/null
+++ b/Build/source/mswin32/add-info-toc.pl
@@ -0,0 +1,60 @@
+$dd = '/';
+
+&main;
+
+exit 0;
+
+sub main {
+ local (@files);
+ @files = @ARGV;
+ $temp = &get_tmp_dir() . "ait.$$";
+ open(OUT, ">$temp") || exit 1;
+ print OUT "Contents:\n\n";
+ while (<>) {
+ $prevline = $line;
+ $line = $_;
+ if ($line =~ m/^\*+$/) {
+ print OUT "$prevline";
+ }
+ elsif ($line =~ m/^=+$/) {
+ print OUT " $prevline";
+ }
+ elsif ($line =~ m/^-+$/) {
+ print OUT " $prevline";
+ }
+ elsif ($line =~ m/^\.+$/) {
+ print OUT " $prevline";
+ }
+ }
+ print OUT "\n\n";
+ @ARGV = @files;
+ while (<>) {
+ print OUT $_;
+ }
+ close (OUT);
+ open (IN, $temp);
+ open (OUT, ">$files[0]");
+ binmode(IN); binmode(OUT);
+ local($/) = undef;
+ print OUT <IN>;
+ close(OUT);
+ close(IN);
+}
+
+sub get_tmp_dir {
+ if (!($TMP)) {
+ local (@l) = ("TMPDIR", "TEMP", "TMP", "c${dd}tmp");
+ local ($var, $dir);
+ foreach $var (@l) {
+ $dir = $ENV{$var};
+ if (-d $dir) {
+ $TMP = $dir;
+ last;
+ }
+ }
+ }
+ $TMP =~ s/\\/$dd/g;
+
+ if ($TMP =~ /$dd$/) {
+ } else { $TMP .= $dd }
+}
diff --git a/Build/source/mswin32/build.bat b/Build/source/mswin32/build.bat
new file mode 100644
index 00000000000..2d15b2d89ef
--- /dev/null
+++ b/Build/source/mswin32/build.bat
@@ -0,0 +1,44 @@
+taskkill /im:ispell.exe /f
+rem p4 sync -f //depot/Master/texmf/...
+rem rmdir /q/s "c:\program files\texlive\texmf"
+rem mkdir "c:\program files\texlive\texmf"
+rem xcopy c:\source\texlive\Master\texmf "c:\program files\texlive\texmf" /r/i/e/k
+rem perl ./sync.pl c:/source/texlive/Master/texmf "c:/Program Files/texlive/texmf"
+rem perl ./sync.pl c:/source/texlive/Master/texmf-dist "c:/Program Files/texlive/texmf-dist"
+rem perl ./sync.pl c:/source/texlive/Master/texmf-doc "c:/Program Files/texlive/texmf-doc"
+perl ./build.pl --distclean=tex --development
+perl ./build.pl --distclean=xemtex --development
+perl ./sync.pl --sources
+perl ./sync.pl --restrict --texmf
+rem pushd .. & ( \source\fptex\gnu\diffutils-2.7\dynamic\diff.exe -ruN -X mswin32\diff.exclude -x "*/texk.development/*" c:/source/TeXLive/Build/source/TeX ./ > diffs\tl-source-29.diff ) & popd
+rem pushd .. & ( \source\fptex\gnu\diffutils-2.7\dynamic\diff.exe -ruN -X mswin32\diff.exclude c:/source/TeXLive/Build/source.development/TeX/texk ./texk.development > diffs\tl-dev-29.diff ) & popd
+rem pushd .. & ( \source\fptex\gnu\diffutils-2.7\dynamic\diff.exe -ruN -X mswin32\diff.exclude ./texk ./texk.development > diffs\dev-29.diff ) & popd
+perl ./build.pl --build=tex --log=build.log --development
+perl ./build.pl --build=xemtex --log=xemtex.log --development
+perl ./build.pl --install=tex --log=install.log --from_scratch --development
+mktexlsr
+updmap
+fmtutil --all --dolinks --force
+perl ./build.pl --install=tex --log=install.log --development
+perl ./build.pl --install=xemtex --log=xemtex-install.log --development
+perl ./build.pl --standalone --development --log=standalone.developement.log
+perl ./sync.pl c:/progra~1/texlive/bin/win32 c:/source/texlive/Master/bin/win32
+perl ./sync.pl c:/progra~1/texlive/bin/win32-static c:/source/texlive/Master/bin/win32-static
+perl ./sync.pl --restrict c:/progra~1/texlive/xemtex c:/source/texlive/Master/xemtex
+perl ./sync.pl --restrict c:/progra~1/texlive/texmf c:/source/texlive/Master/texmf
+perl ./p4update.pl --update --subdir=Master/bin/win32
+perl ./p4update.pl --update --subdir=Master/bin/win32-static
+perl ./p4update.pl --update --subdir=Master/texmf
+perl ./p4update.pl --update --subdir=Master/xemtex
+pushd \source\texlive\Master\Tools
+rem perl ./tpm-factory.pl --clean --patterns=from --arch=all --type=TLCore
+rem perl ./tpm-factory.pl --clean --patterns=auto --arch=all --type=Package
+rem perl ./tpm-factory.pl --clean --patterns=auto --arch=all --type=Documentation
+rem perl ./tpm-factory.pl --check=dep --arch=all > dependencies.log
+rem perl ./tpm-factory.pl --check=cov --arch=all --type=TLCore > tlcore-coverage.log
+rem perl ./tpm-factory.pl --check=cov --arch=all --type=Package > package-coverage.log
+rem perl ./tpm-factory.pl --check=cov --arch=all --type=Documentation > documentation-coverage.log
+rem perl ./tpm-factory.pl --tpm2zip --arch=win32 --all
+rem perl ./tpm-factory.pl --tpm2zip=full --arch=win32-static --standalone
+popd
+
diff --git a/Build/source/mswin32/build.pl b/Build/source/mswin32/build.pl
new file mode 100644
index 00000000000..14606ad76f9
--- /dev/null
+++ b/Build/source/mswin32/build.pl
@@ -0,0 +1,452 @@
+#
+# Build tool for Web2C & supp
+# Author: F. Popineau
+# Date : 04/11/98
+# Time-stamp: <04/03/19 00:52:22 popineau>
+#
+# Usage:
+# build <option>
+# [--static] builds/cleans up statically
+# [--debug] builds/cleans up in debug mode
+# [--depend] updates dependencies
+# [--clean] cleans up
+# [--distclean] removes everything that can be rebuild (needs to configure again)
+# [--dir <dir>] only in <dir> (relative to top !)
+# [--install] installs what has been built (incompaible with clean up targets)
+# [--from-scratch] full build, removes everything from the destination tree.
+# [--log <file>] logs everything onto <file>
+#
+# Hope these options are clear enough. This is a wrapper to nmake calls.
+#
+
+BEGIN {
+push @INC, 'c:/source/TeXLive/Master/Tools';
+}
+
+require "newgetopt.pl";
+use lib qw (. ./msvc);
+use FileUtils qw(canon_dir cleandir make_link newpath
+ normalize substitute_var_val dirname
+ rec_rmdir sync_dir walk_dir start_redirection
+ stop_redirection sync_dir);
+use Tpm;
+use Cwd;
+use Time::gmtime;
+
+# list if functions to be called before nmake is run
+@prepare_func_list = ( );
+
+$fpTeXVersion = "0.7";
+$FtpDir = "c:/InetPub/ftp/fptex/$fpTeXVersion";
+
+$Gm = gmtime();
+$Date = sprintf("%02d-%02d-%02d", $Gm->year() + 1900, $Gm->mon(), $Gm->wday());
+# root directory
+$topdir = &dirname(cwd());
+$win32_dir = "$topdir/mswin32";
+$msvc_dir = "$topdir/texk/msvc";
+$tpmdir = "$win32_dir/factory/texmf-dist/tpm";
+$zipsrc_name = "$FtpDir/sources/fptex-$fpTeXVersion-$Date.zip";
+$destdir="c:/Program Files/TeXLive";
+$logfile = "";
+
+# the directories for which we build standalone packages
+# (aka: no DLL)
+@src_standalone = ( "libs/libgnuw32", "libs/libgsw32", "libs/geturl",
+ "libs/zlib", "libs/libpng", "libs/jpeg", "libs/xpdf",
+ "utils/bzip2", "utils/gzip", "utils/jpeg2ps",
+ "texk/kpathsea", "texk/contrib",
+ "texk/web2c",
+ "texk/windvi", "texk/dvipsk",
+ "texk/odvipsk", "texk/owindvi",
+ "texk/gsftopk", "texk/tex4htk",
+ "texk/dvipdfm", "texk/dvipdfmx",
+ "utils/lcdf-typetools"
+ );
+
+# list of directories in $(prefix) that will be created by nmake
+# and that will be removed before anything if asking to install `from_scratch'
+@fptex_dirs = ( "bin", "include", "lib", "setupw32" );
+
+# directories that should not end up in the zip archive
+# of sources
+@zipsrc_exclude_dirs = (
+ "/(dynamic|dynamic-debug|static|static-debug|Release|Debug)\$",
+ "/win32/(diff|setupw32|factory|ttfinst|worked-on)\$",
+ "/win32/(deutsch|english|fptex.old|french|labels|slovak|tds)\$",
+ "/utils/rxp-1.2\$",
+ "/texk/(ltx2rtf-old|windvi-0.68|texdoctk-0.3.0|texdoctk-0.4.0)\$"
+ );
+
+@zipsrc_exclude_patterns = (
+ "\.(obj|dll|exe|opt)\$",
+ "~\$"
+);
+
+
+&main;
+
+1;
+
+sub help
+{
+ print "Usage: build [options]\n";
+ print "\n";
+ print " --dir <path> Apply to the subdir <path> (relative);\n";
+ print " --log <file> Redirect stdin and stderr in <file>\n";
+ print " --static Build statically linked versions;\n";
+ print " --debug Build debug versions;\n";
+ print " --sync Sync up with master;\n";
+ print " --standalone Build standalone packages (ie: static, nodebug);\n";
+ print " --zipsrc(=clean) Build a source archive, (possibly cleaning the tree before);\n";
+ print "\n";
+ print " Targets :\n";
+ print " <none> Compiles;\n";
+ print " --clean Clean up last build (only compilation);\n";
+ print " --distclean Clean up last build (everything, must configure again);\n";
+ print " --build Build everything;\n";
+ print " --install Install everything build;\n";
+ print " These targets are exclusive !\n";
+ print "\n";
+ print " --from_scratch Use with --install and --build only,\n";
+ print " will remove everything from <prefix> directory,\n";
+ print " --prefix Used with --install only,\n";
+ print " will change temporarily the <prefix> directory,\n";
+ print "\n";
+ print " Support commands:\n";
+ print " --help displays this help text and exits\n";
+ print " --verbose some more messages\n";
+}
+
+sub read_config_var
+{
+ local($file, $varname) = @_;
+ local($val);
+ open VER, "<$file";
+ while (<VER>) {
+ if ($_ =~ m/^$varname\s*=\s*(.*)$/) {
+ $val = $1;
+ }
+ }
+ close VER;
+ return $val;
+}
+
+sub make_absolute
+{
+ local ($rel) = @_;
+ local ($current, $abs);
+ $current = cwd();
+ chdir $rel;
+ $abs = cwd();
+ print "current = $current, rel = $rel, abs = $abs\n";
+ chdir $current;
+ return $abs;
+}
+
+sub from_scratch
+{
+ local ($d, $prefix, $l, $highest, $srcdir, $dstdir);
+
+ $prefix = &read_config_var("$msvc_dir/paths.mak", "prefix");
+ $prefix = &canon_dir($prefix, '\\');
+ print "Prefix directory is $prefix .\n" if $opt_verbose;
+
+ # Removing every fpTeX thing from prefix directory
+ foreach $d ( @fptex_dirs ) {
+ if (-d "$prefix\\$d") {
+ &cleandir("$prefix\\$d");
+ rmdir "$prefix\\$d";
+ }
+ }
+
+ # Add an option to sync up with the TeXLive texmf tree
+}
+
+sub mask_env {
+ $ENV{"SystemDrive"} = "foo";
+ $ENV{"TEXMFCNF"} = "foo";
+ $ENV{"TEXMFMAIN"} = "foo";
+# $ENV{"TEXMF"} = "foo";
+ $ENV{"LATEX2HTML"} = "foo";
+ $ENV{"GROFF_TMAC_PATH"}="foo";
+ $ENV{"GROFF_FONT_PATH"}="foo";
+}
+
+sub ziplist {
+ my ($dir, @l) = @_;
+ $dir =~ s@\\@/@g;
+ map {
+ if (! -d "$dir/$_") {
+ for $pattern (@zipsrc_exclude_patterns) {
+ if ("$dir/$_" =~ m@$pattern@i) {
+ goto suivant;
+ }
+ }
+ print STDERR "$dir/$_\n" if ($opt_verbose);
+ print ZIP "$dir/$_\n";
+ }
+ suivant:
+ } @l;
+}
+
+sub zipprune {
+ my ($dir) = @_;
+ $dir =~ s@\\@/@g;
+ map {
+ if ($dir =~ m@$_@) {
+ print STDERR "Pruning $dir...\n" if ($opt_verbose);
+ return 1;
+ }
+ } @zipsrc_exclude_dirs;
+ return 0;
+}
+
+sub do_zipsrc {
+ unlink $zipsrc_name if (-f $zipsrc_name);
+ open ZIP, "| zip -9\@or " . $zipsrc_name . " > nul";
+ &walk_dir($topdir, \&ziplist, \&zipprune);
+ close ZIP;
+}
+
+sub do_standalone {
+ local($cmd, $cwd);
+
+ # make the static binaries needed
+ print STDERR "Installing in $prefix\n";
+
+ &mask_env;
+
+ &start_redirection($logfile);
+
+ my $devel_flag = " DEVELOPMENT=1 " if ($opt_development);
+ for $d (@src_standalone) {
+ $d =~ s/texk/texk.development/ if ($opt_development);
+ my $cwd = &getcwd;
+ print "Changing directory to $topdir/${d}\n" if $opt_verbose;
+ chdir("$topdir/${d}");
+ $cmd = "nmake -f win32.mak NODEBUG=1 STATIC=1 ${devel_flag} all";
+ print "Running $cmd\n" if $opt_verbose;
+ system($cmd);
+ $cmd = "nmake -f win32.mak NODEBUG=1 STATIC=1 ${devel_flag} install";
+ print "Running $cmd\n" if $opt_verbose;
+ system($cmd);
+ chdir($cwd)
+ }
+
+ &stop_redirection($logfile);
+}
+
+sub do_sync {
+
+ $cmd = "p4 sync";
+ system($cmd);
+
+ &sync_dir("$masterdir/texmf-dist", "$destdir/texmf-dist");
+ &sync_dir("$masterdir/texmf", "$destdir/texmf");
+ &sync_dir("$masterdir/texmf/web2c", "$destdir/texmf-var/web2c");
+
+}
+
+sub main {
+
+ local ($changed_prefix);
+
+ unless (&NGetOpt ("static", "debug",
+ "clean", "distclean:s" ,
+ "depend","from_scratch",
+ "build:s", "install:s",
+ "zipsrc:s",
+ "standalone", "sync",
+ "development",
+ "dir=s", "log=s", "prefix=s",
+ "verbose", "help"))
+ {
+ print STDERR "Try `configure --help'";
+ exit 1;
+ }
+
+ if ($opt_help) {
+ &help;
+ exit 0;
+ }
+
+ $prefix = &read_config_var("$msvc_dir/paths.mak", "prefix");
+
+ if ($opt_log) {
+ $logfile = "$win32_dir\\$opt_log";
+ if (! $opt_log =~ /\.log$/) {
+ $opt_log .= ".log";
+ }
+ }
+
+# $topdir .= "/source";
+# if ($opt_development) {
+# $topdir .= ".development";
+# }
+
+# $win32_dir = eval($win32_dir);
+# $tpmdir = eval($tpmdir);
+
+ if ($opt_standalone) {
+ &do_standalone;
+ exit 0;
+ }
+
+ if (defined($opt_zipsrc) && $opt_zipsrc ne "clean") {
+ &do_zipsrc;
+ exit 0;
+ }
+ if (defined($opt_zipsrc) && $opt_zipsrc eq "clean") {
+ $opt_distclean = 1;
+ }
+
+ # build the command line
+ $prog = "nmake -f win32.mak ";
+ $prog .= "verbose=on " if ($opt_verbose);
+ if ($opt_debug eq '') {
+ $prog .= "NODEBUG=1 ";
+ }
+ if ($opt_static) {
+ $prog .= "STATIC=1 ";
+ }
+
+ if ($opt_development) {
+ $prog .= "DEVELOPMENT=1 ";
+ }
+
+ if ($opt_depend) {
+ $prog .= "MAINT=1 ";
+ $target = "depend ";
+ }
+ if (defined($opt_build)) {
+ if ($target ne '') {
+ print "Conflicting targets : $target and build\n";
+ return 1;
+ }
+ $target = "all ";
+ if ($opt_from_scratch) {
+ push @prepare_func_list , ( \&from_scratch );
+ }
+ $target = "XEMTEX=1 $target" if ($opt_build =~ m/xemtex/i);
+ $target = "NETPBM=1 $target" if ($opt_build =~ m/^netpbm$/i);
+ $target = "GNU=1 $target" if ($opt_build =~ m/^gnu$/i);
+ print "target = $target\n";
+ }
+ if (defined($opt_install)) {
+ if ($target ne '') {
+ print "Conflicting targets : $target and install\n";
+ return 1;
+ }
+ $target = "install ";
+ if ($opt_from_scratch) {
+ push @prepare_func_list , ( \&from_scratch );
+ }
+ $target = "XEMTEX=1 $target" if ($opt_install =~ m/xemtex/i);
+ $target = "NETPBM=1 $target" if ($opt_install =~ m/^netpbm$/i);
+ $target = "GNU=1 $target" if ($opt_install =~ m/^gnu$/i);
+ print "target = $target\n";
+ }
+ if ($opt_clean) {
+ if ($target ne '') {
+ print "Conflicting targets : $target and clean\n";
+ return 1;
+ }
+ $target = "clean ";
+ }
+ if (defined($opt_distclean)) {
+ if ($target ne '') {
+ print "Conflicting targets : $target and distclean\n";
+ return 1;
+ }
+ $prog .= "MAINT=1 ";
+ $target = "distclean ";
+ $target = "XEMTEX=1 $target" if ($opt_distclean =~ m/xemtex/i);
+ $target = "NETPBM=1 $target" if ($opt_distclean =~ m/^netpbm$/i);
+ $target = "GNU=1 $target" if ($opt_distclean =~ m/^gnu$/i);
+ print "target = $target\n";
+ }
+
+ if ($target eq '') {
+ print "No target specified.\nEnd.\n";
+ exit 0;
+ }
+
+ if ($opt_prefix) {
+ if ($target ne "install ") {
+ print STDERR "$0: --prefix option ignored, wrong target.\n";
+ }
+ elsif (! -d $opt_prefix) {
+ print STDERR "$0: $opt_prefix is not a directory, aborting.\n";
+ exit 1;
+ }
+ else {
+ $opt_prefix = &normalize($opt_prefix);
+ if ($prefix ne $opt_prefix) {
+ print STDERR "Replacing prefix $prefix with $opt_prefix.\n";
+ @old_prefix = &substitute_var_val("$msvc_dir/paths.mak",
+ "prefix", "$opt_prefix");
+ $changed_prefix = 1;
+ $old_prefix = $prefix;
+ $prefix = $opt_prefix;
+ }
+ }
+ }
+
+ print STDERR "Installing in $prefix\n";
+
+ &mask_env;
+
+ $prog .= $target;
+
+ $buildir = $topdir;
+
+ if ($opt_dir) {
+ $buildir .= "\\$opt_dir";
+ }
+
+ print STDERR "buildir = $buildir\n";
+
+ if (-d $buildir) {
+ chdir $buildir;
+ }
+ else {
+ print "Non-existent dir: $opt_dir\n";
+ return 1;
+ }
+
+ # start redirection if asked
+ &start_redirection($logfile);
+
+ if ($opt_sync) {
+ &do_sync;
+ }
+
+ # Prepare functions
+ for $f (@prepare_func_list) {
+ if ($f) {
+ &{$f};
+ }
+ }
+
+ # Call the program
+ #`$prog`;
+ print STDOUT "Executing $prog in " . &getcwd . "\n";
+ system($prog);
+
+ # stop redirection
+ stop_redirection($logfile);
+
+ chdir $topdir;
+
+ if ($#old_prefix > -1) {
+ &substitute_var_val("$msvc_dir/paths.mk",
+ "prefix", shift @old_prefix);
+ }
+
+ if ($opt_distclean && $opt_zipsrc) {
+ &do_zipsrc;
+ }
+
+ print "This is the end!\n";
+}
diff --git a/Build/source/mswin32/conf-cauto.pl b/Build/source/mswin32/conf-cauto.pl
new file mode 100644
index 00000000000..a4f0f72b2b7
--- /dev/null
+++ b/Build/source/mswin32/conf-cauto.pl
@@ -0,0 +1,54 @@
+#
+# Generate .h file from .in file
+# Define or undefine features for the WIN32 platform
+#
+
+use cauto;
+
+&main;
+
+exit(0);
+
+sub main {
+ local ($src, $dst);
+
+ if (-f "$ARGV[0]" && $ARGV[0] =~ /(.*)\.in$/) {
+ $src = $ARGV[0];
+ $dst = $1;
+ if ($ARGV[1] =~ /(.*)\.h$/) {
+ $dst = $ARGV[1];
+ }
+ &cauto::configure_cauto($src, $dst);
+ }
+ else {
+ if (-f "./cauto.h.in") {
+ $src = "./cauto.h.in";
+ $dst = "./cauto.h";
+ &cauto::configure_cauto($src, $dst);
+ }
+ elsif (-f "./c-auto.in") {
+ $src = "./c-auto.in";
+ $dst = "./c-auto.h";
+ &cauto::configure_cauto($src, $dst);
+ }
+
+ if (-f "./config.h.in") {
+ $src = "./config.h.in";
+ $dst = "./config.h";
+ &cauto::configure_cauto($src, $dst);
+ }
+ elsif (-f "./config.hin") {
+ $src = "./config.hin";
+ $dst = "./config.h";
+ &cauto::configure_cauto($src, $dst);
+ }
+ elsif (-f "./config.in") {
+ $src = "./config.in";
+ $dst = "./config.h";
+ &cauto::configure_cauto($src, $dst);
+ }
+ else {
+ print STDERR "No file to configure found!\n";
+ }
+ }
+}
diff --git a/Build/source/mswin32/configure.pl b/Build/source/mswin32/configure.pl
new file mode 100644
index 00000000000..f72a302ac19
--- /dev/null
+++ b/Build/source/mswin32/configure.pl
@@ -0,0 +1,767 @@
+#
+# Configure tool for Web2C & supp
+# Author: F. Popineau
+# Date : 22/12/97
+# Time-stamp: <04/02/15 14:47:24 popineau>
+#
+# Usage:
+# configure --import : will import Makefiles into the Win32 repository
+# configure --prefix <texpath> --tools_prefix <toolspath>
+# --verbose
+# configure --help : gives some help usage
+
+use lib 'c:/source/TeXLive/Master/texmf-dist/tpm';
+
+require "newgetopt.pl";
+# use diagnostics;
+use FileUtils qw(dirname basename normalize walk_dir sort_uniq
+ member push_uniq remove_list
+ build_tree print_tree walk_tree cleandir
+ is_dirsep is_absolute canon_dir build_path
+ basename look_for );
+use cauto qw(configure_cauto $kpsever $web2cver);
+use Cwd;
+
+# Repository for Makefiles and maybe others too
+$win32_config_dir = "./win32/config/";
+
+# Repository for .mak files
+$win32_mk_dir = "./make/";
+#Repository for .rc files
+$win32_rc_dir = "./rc/";
+
+# List of configuration variables, to be looked for and replaced.
+@config_vars = ('kpsemaj', 'kpsemin', 'kpsebeta',
+ 'web2cmaj', 'web2cmin', 'web2cbeta',
+ 'buildmaj', 'buildmin', 'buildbeta', 'buildgamma');
+
+# Path under which we will run
+# BEWARE : path size is limited, even under NT
+@path_list = (
+ # ensure that binaries from the current directory are used
+ '"./\$(objdir)"',
+ # kpathsea.dll from the build tree
+ '"\$(top_srcdir)/kpathsea/\$(objdir)"',
+ # current zlib? pnglib, tifflib and joglib for pdftex
+ '"\$(ZLIBDIR)/\$(objdir)"',
+ '"\$(PNGLIBDIR)/\$(objdir)"',
+ '"\$(TIFFLIBDIR)/\$(objdir)"',
+ '"\$(JPGLIBDIR)/\$(objdir)"',
+ # current tex engines
+ '"\$(top_srcdir)/web2c/\$(objdir)"',
+ # current makeinfo, install-info
+ '"\$(root_srcdir)/supp/texinfo/makeinfo/\$(objdir)"',
+ '"\$(root_srcdir)/supp/texinfo/util/\$(objdir)"',
+ # we still need to run tex & co at some point during the installation
+# '$new_paths{prefix} . "/bin/win32"',
+ '"\$(prefix)/bin/win32"',
+ # GNU tools
+# '$new_paths{toolsprefix} . "/bin"',
+ '"\$(toolsprefix)/bin"',
+ # compiler, because the PATH in win32.mak will override the
+ # one in the environment
+ '$ENV{"MSDEVDIR"} . "/../../VC98/Bin"',
+ '$ENV{"MSDEVDIR"} . "/Bin"',
+ 'dirname($new_paths{prefix}) . "/perl/bin"',
+ # Windows by itself !
+ '$ENV{"SYSTEMROOT"}. "/System32"',
+ '$ENV{"SYSTEMROOT"}',
+ # '$ENV{"NTRESKIT"}',
+ );
+
+$vernumreg = "-(v)?[0-9]+(\.[0-9]+)*([a-z0-9]*)?";
+
+# List of directories to exclude from installation
+@config_exclude_paths = ( '"./gnu"',
+ # '"./InstallShield/etex-win32"',
+ # '"./pdftex-win32"',
+ # '"./xdvi-win32"',
+ '"./Native"',
+ '"./dialog"',
+ '"./InstallShield"',
+ '"./doc/tug99"',
+ '"./doc/gut99"',
+ '"./doc/mpost"',
+ '"./supp/Setup"',
+ '"./libs/libttfVERNUM/arch/amigaos"',
+ '"./libs/libttfVERNUM/arch/msdos"',
+ '"./libs/libttfVERNUM/arch/os2"',
+ '"./libs/libttfVERNUM/arch/unix"',
+ '"./libs/libwwwVERNUM/cvs2sql"',
+ '"./libs/libwwwVERNUM/examples"',
+ '"./libs/libwwwVERNUM/External"',
+ '"./libs/libwwwVERNUM/User"',
+ '"./libs/libwwwVERNUM/vms"',
+ '"./libs/libwwwVERNUM/windows"',
+ '"./libs/w3c-libwwwVERNUM"',
+ '"./supp/gzipVERNUM/amiga"',
+ '"./supp/gzipVERNUM/atari"',
+ '"./supp/gzipVERNUM/msdos"',
+ '"./supp/gzipVERNUM/nt"',
+ '"./supp/gzipVERNUM/os2"',
+ '"./supp/gzipVERNUM/vms"',
+ '"./supp/ttf2pk/data"',
+ '"./supp/ttf2pk/scripts"',
+ '"./supp/ttfdump/docs"',
+ '"./supp/ttfdump/include"',
+ '"./supp/french"',
+ '"./supp/installVERNUM"',
+ '"./supp/texconfig"',
+ '"./supp/xindyk"',
+ '"./supp/texinfo/info"',
+ '"./supp/texinfo/emacs"',
+ '"./supp/texinfo/po"',
+ '"./supp/texinfo/intl"',
+ '"./supp/tiffVERNUM"',
+ '"./supp/tiffVERNUM/contrib"',
+ '"./supp/tiffVERNUM/html"',
+ '"./supp/tiffVERNUM/ports"',
+ '"./supp/tiffVERNUM/man"',
+ '"./supp/tiffVERNUM/contrib/acorn"',
+ '"./supp/xdvikVERNUM"',
+ '"./supp/xdvik.new"',
+ '"./libs/gifreaderVERNUM"',
+ '"./libs/jpegVERNUM"',
+ '"./libs/zlibVERNUM/amiga"',
+ '"./libs/zlibVERNUM/contrib"',
+ '"./libs/zlibVERNUM/msdos"',
+ '"./libs/zlibVERNUM/nt"',
+ '"./libs/zlibVERNUM/os2"',
+ '"./libs/xpdfVERNUM/ltk"',
+ '"./todo"',
+ '"./upgrades"',
+ '"./share"',
+ '"./win32"',
+ '"./win32/config"',
+ '"./win32/winmake"',
+ '"./win32/def"',
+ '"./win32/rc"',
+ '"./win32/sed"',
+ '"./win32/perl"',
+ 'basename($web2cdir) . "/djgpp"',
+ 'basename($web2cdir) . "/contrib/glob"',
+ 'basename($web2cdir) . "/contrib/regex"',
+ 'basename($web2cdir) . "/dviljk/fonts"',
+ 'basename($web2cdir) . "/dvipdfm/latex-support"',
+ 'basename($web2cdir) . "/dvipsk/vms"',
+ 'basename($web2cdir) . "/dvipsk/vmcms"',
+ 'basename($web2cdir) . "/libwww"',
+ 'basename($web2cdir) . "/ps2pk16beta1a"',
+ 'basename($web2cdir) . "/oxdvik"',
+ 'basename($web2cdir) . "/share"',
+ 'basename($web2cdir) . "/tetex"',
+ 'basename($web2cdir) . "/texlive"',
+ 'basename($web2cdir) . "/web2c/tiedir"',
+ 'basename($web2cdir) . "/xdvik"',
+ '"dynamic"', '"dynamic-debug"',
+ '"static"', '"static-debug"');
+
+# A-List of {variable, pathname} to be replaced.
+%config_paths = ('root_srcdir' => 'version_make',
+ 'prefix' => 'paths_make',
+ 'toolsprefix' => 'version_make',
+ 'texmf' => 'paths_make',
+ 'BOUNDSCHECKER' => 'version_make',
+ 'PATH' => 'version_make',
+ 'SystemDrive' => 'version_make',
+ # 'MSDevDir' => 'version_make',
+ # 'TEXMFMAIN' => 'version_make',
+ # 'TEXMF' => 'version_make'
+ );
+
+# List of tools to be checked. Each tool has a make variable with
+# the same name capitalized (SED = c:\bin\sed.exe).
+# If a name has an association, use it (builtin commands).
+%tools = ('tr' => '',
+ 'sed' => '',
+ 'grep' => '',
+ 'diff -u' => '',
+ 'makedepend -Y' => '',
+ 'perl' => '',
+ 'echo' => 'echo',
+ 'cp' => 'copy',
+ 'touch' => '',
+ 'rm' => 'del /f/q',
+ 'mv' => 'copy',
+ );
+
+&main;
+
+exit 0;
+
+
+sub dir_match
+ {
+ local ($d1, $d2) = @_;
+ local ($e1, $e2, $ret);
+ $e1 = quotemeta(&canon_dir($d1));
+ $e1 =~ s/VERNUM/$vernumreg/g;
+ # $e1 = &canon_dir($d1);
+ $e2 = &canon_dir($d2);
+ $ret = ($e2 =~ m/$e1/);
+ # if ($ret) { print "dir_match : $d1 & $d2\n-> $e1 & $e2 = $ret\n"; }
+ return $ret;
+ }
+
+# Rename source into destination, backuping the source.
+sub rename
+ {
+ local ($src, $dest) = @_;
+ print STDERR "Renaming $src -> $dest\n" if $opt_verbose;
+ # under Win32, better to ensure that $dest does not exist anymore.
+ if (-f $dest) {
+ unlink ("$dest.backup");
+ rename ($dest, "$dest.backup");
+ }
+ rename ($src, $dest);
+ }
+
+# Move source to dest, dest may be a directory
+sub move
+ {
+ local ($src, $dest) = @_;
+ print STDERR "Moving $src -> $dest\n" if $opt_verbose;
+ die "Copy : source file $src does not exist.\n"
+ unless (-f $src);
+ die "Copy : destination file $dest does not exist.\n"
+ unless (-f $src || -d $src);
+ if (-d $dest) {
+ $dest = &build_path($dest, &basename($src));
+ }
+ if (-f $dest) {
+ &rename($dest, "$dest.backup");
+ }
+ &copy($src, $dest);
+ unlink($src);
+ }
+
+# Copy source to dest
+sub copy
+ {
+ local ($src, $dest) = @_;
+
+ print "Copying $src to $dest\n" if ($opt_verbose);
+
+ die "Copy : source file $src does not exist.\n"
+ unless (-f $src);
+ # die "Copy : destination file $dest does not exist.\n"
+ # unless (-f $dest || -d $dest);
+ if (-d $dest) {
+ $dest = &build_path($dest, &basename($src));
+ }
+ open IN, "<$src";
+ open OUT, ">$dest";
+ binmode(IN);
+ binmode(OUT);
+ print OUT <IN>;
+ close(IN);
+ close(OUT);
+ }
+
+# Copy a text file filtering lines as stated by the filter function
+sub copy_filter
+ {
+ # these variables must have a lexical scope, so
+ # will be hopefully available in the filter function
+ local ($src, $dest, $filter) = @_;
+ local ($line, $num);
+
+ print "Copying $src to $dest with filtering\n" if ($opt_verbose);
+
+ die "Copy : source file $src does not exist.\n"
+ unless (-f $src);
+ if (-d $dest) {
+ $dest = &build_path($dest, &basename($src));
+ }
+ open IN, "<$src";
+ open OUT, ">$dest";
+ $num = 0;
+ while (<IN>) {
+ $line = &{$filter}($_);
+ print OUT $line;
+ $num = $num + 1;
+ }
+ close(IN);
+ close(OUT);
+
+ }
+
+# Test if f1 is newer than f2
+sub newer
+ {
+ local ($f1, $f2) = @_;
+ local ($d1, $d2, $res);
+ @d1 = stat($f1); $d1 = $d1[9];
+ @d2 = stat($f2); $d2 = $d2[9];
+ $res = 0;
+ if ($#d1 == 0) {
+ $res = 0;
+ }
+ if ($#d2 == 0 ) {
+ $res = 1;
+ }
+ $res = $d1 > $d2;
+
+ if ($res) {
+ print "Warning: $f1 is newer than $f2.\n";
+ }
+ return($res);
+ }
+
+# What this script does...
+sub help
+ {
+ print "Usage: configure [options]\n";
+ print "\n";
+ print " --prefix <path> sets the root tree at <path>;\n";
+ print " assumes TeX will be in \n";
+ print " <path>\TeX\{bin,include,lib,share}\n";
+ print " --tools_prefix <tools-path> sets the tools tree at <tools-path>\n";
+ print " assumes the other tools will be in \n";
+ print " <tools-path>\{bin,include,lib,share}\n";
+ print " It is expected that flex, bison, sed, gawk, makedepend and groff will\n";
+ print " be found in <tools-path>. If you do not have them, check the following\n";
+ print " adress :\n";
+ print " <CTAN>/systems/win32/fptex/gnutools-1.1-win32.zip\n";
+ print " The whole package can only be build reliably under NT (because of\n";
+ print " batch commands) and using Visual Studio .Net\n";
+ print " This is the currrent release and I won't make any effort supporting\n";
+ print " previous versions.\n";
+ print " Be careful that some global optimizations of `cl' are removed by hand\n";
+ print " in `convert.bat' and are specific to each version of `cl'\n";
+ print " Last but not least, it is expected that a some texmf tree be found\n";
+ print " in <path>/texmf.\n";
+ print " \n";
+ print " Using this normal mode will copy/update/check the configuration files\n";
+ print " to make the distribution ready for compilation.\n";
+ print " Kpathsea and Web2C version numbers are guessed from their\n";
+ print " configure.in files, looked for in the highest web2c-xx.yyzz directory\n";
+ print " found. There should be no problem if the distribution\n";
+ print " is consistent.\n";
+ print " After that, type :\n";
+ print " perl ./build.pl --install --log=install.log\n";
+ print " and wait...\n";
+ print "\n";
+ print " Support commands:\n";
+ print " --help displays this help text and exits\n";
+ # print " --makedist will assemble a new release\n";
+ }
+
+# Read current config variables from the file
+sub read_current
+ {
+ local($file) = @_;
+ open VER, "<$file";
+ while (<VER>) {
+ $line = $_;
+ foreach $v (@config_vars) {
+ if ($line =~ m/^$v\s*=\s*(.*)$/) {
+ $current_vars{$v} = $1;
+ }
+ }
+ }
+ close VER;
+ }
+
+# Read current paths from their files (path.mak, w2cwin32.mak)
+sub read_paths
+ {
+ local ($k,$p);
+ foreach $k (keys %config_paths) {
+ @p = ($k, eval "\$$config_paths{$k}");
+ open IN, "<$p[1]";
+ while (<IN>) {
+ if (/^$p[0]\s*=\s*(.*)$/) {
+ $current_paths{$p[0]} = $1;
+ }
+ }
+ close IN;
+ }
+ }
+
+# Display current configuration variables
+sub print_current
+ {
+ foreach $v (@config_vars) {
+ print "$v = $current_vars{$v}\n";
+ }
+ foreach $k (keys %config_paths) {
+ @p = ($k, eval "\$$config_paths{$k}");
+ print "$k = $current_paths{$k}\n";
+ }
+ }
+
+# Write current configuration variables (into w2cwin32.mak, argument)
+sub write_current
+ {
+ local($file) = @_;
+ open VERIN, "<$file";
+ open VEROUT, ">$file.tmp";
+
+ while (<VERIN>) {
+ $line = $_;
+ foreach $v (@config_vars) {
+ if ($line =~ s,^$v\s*=\s*(\S*)$,$v = $current_vars{$v},) {
+ print "$v was $1, is $current_vars{$v}\n" if ($opt_verbose);
+ }
+ }
+ print VEROUT $line;
+ if ($line !~ m/\n$/) { print VEROUT "\n"; }
+ }
+
+ close VERIN;
+ close VEROUT;
+ &rename("$file.tmp", "$file");
+ }
+
+# Write current paths into their files.
+# Beware to the logic: each file must be open only once.
+sub write_paths
+ {
+ local ($k,$p);
+
+ @lv = &sort_uniq(values %config_paths);
+ # foreach file (values of the hash config_paths)
+ foreach $v (@lv) {
+ $filename = eval("\$$v");
+ open IN, "<$filename";
+ open OUT, ">$filename.tmp";
+ @p = ();
+ # which keys $k have value $v ?
+ foreach $k (keys %config_paths) {
+ if ($config_paths{$k} eq $v) {
+ push @p, ($k);
+ }
+ }
+ # foreach line in the file
+ while (<IN>) {
+ $line = $_;
+ foreach $k (@p) {
+ if ($line =~ s,^$k\s*=\s*(.*)$,$k = $current_paths{$k},) {
+ print "$k was $1, is $current_paths{$k}\n" if ($opt_verbose);
+ }
+ }
+ print OUT $line;
+ }
+ close IN;
+ close OUT;
+ &rename ("$filename.tmp", "$filename");
+ }
+ }
+
+# Rewrite the resources common include file, using a template
+# (w2cversion.h built using w2cversion.in)
+sub write_res
+ {
+ local($fout) = @_;
+ local($fin, $line);
+ $fin = $fout;
+ $fin =~ s/^(.*)\.h$/$1.in/;
+ # print "Res: $fin -> $fout\n";
+ open IN, "<$fin";
+ open OUT, ">$fout";
+ while (<IN>) {
+ $line = $_;
+ foreach $v (@config_vars) {
+ $line =~ s/\@$v\@/$current_vars{$v}/g;
+ }
+ print OUT $line;
+ }
+ close IN;
+ close OUT;
+ }
+
+# Put win32 configuration files where expected
+sub export_config
+ {
+ local ($dest) = @_;
+ $d = cwd();
+ chdir $dest;
+ # FIXME: add a pointer to the block to execute
+ &walk_dir (".", \&export_files, \&prune_make);
+ chdir $d;
+ }
+
+# Test if $dir is matched by one of the list' element.
+# Also, remove any directory with some version number (-xx.yy)
+sub prune_make
+ {
+ local ($d) = @_;
+ local ($e, $ret);
+ foreach $e (@config_exclude_paths) {
+ if (&dir_match(eval($e), $d)) {
+ print "Pruning $d because of $e\n" if ($opt_verbose);
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+sub export_files
+ {
+ local ($dir, @l) = @_;
+ local ($src, $f, $make_done, $cauto_done);
+
+ # $make_done = 1;
+ $cauto_done = 0;
+
+ foreach $f (@l) {
+ # There are also c-auto.h to export
+ if (! $cauto_done
+ && $dir !~ m@^\.(\\|/)win32$@
+ && $f =~ /^(c-auto|config)(\.h)?\.in$/) {
+ $cauto_done = 1;
+ &configure_cauto("$dir/$f", "$dir/$1.h");
+ }
+ }
+ }
+
+##
+## Packages handling
+##
+
+# Zip one package
+sub makepkg
+ {
+
+ }
+
+# builds the distribution
+sub makedist
+ {
+ local($pkg) = @_;
+ if ($pkg eq "") {
+ # make all packages
+ foreach $pkg (<pkg/*.pkg>) {
+ &makepkg($pkg);
+ }
+ }
+ else {
+ &makepkg($pkg);
+ }
+ }
+
+#
+# Guess web2cver and kpsever by looking at configure.in
+# in web2c-xx.yyzz/kpathsea and web2c-xx.yyzz/web2c
+#
+
+sub guess_web2c_version
+ {
+ local($ret);
+ $ret = 0;
+ $kpsever = &look_for('KPSEVERSION', "$rootdir/texk/kpathsea/configure.in");
+ if ($kpsever =~ /^([0-9]+)\.([0-9])+(\.?)(.*)$/) {
+ $new_vars{'kpsemaj'} = $1;
+ $new_vars{'kpsemin'} = $2;
+ $new_vars{'kpsebeta'} = $4;
+ print "$0: Using kpathsea version $1.$2$3$4\n";
+ $ret = 1;
+ }
+ else {
+ print "$0: can't guess what Kpathsea version you are using.\
+Please set the version numbers for Kpathsea in $win32_mk_dir/w2cwin32.mak\n";
+ }
+ $web2cver = &look_for('WEB2CVERSION', "$rootdir/texk/web2c/configure.in");
+ if ($web2cver =~ /^([0-9]+)\.([0-9])+(\.?)(.*)$/) {
+ $new_vars{'web2cmaj'} = $1;
+ $new_vars{'web2cmin'} = $2;
+ $new_vars{'web2cbeta'} = $4;
+ print "$0: Using Web2C version $1.$2$3$4.\n";
+ $ret = 1;
+ }
+ else {
+ print "$0: can't guess what Web2C version you are using.\
+Please set the version numbers for Web2C in $win32_mk_dir/w2cwin32.mak\n";
+ }
+ return $ret;
+ }
+
+##
+## Main program
+##
+sub main
+ {
+ unless (&NGetOpt ("help",
+ # "import",
+ # "kpsever=s", "web2cver=s",
+ # "newbuild=s",
+ "makedist:s", "prefix=s",
+ "tools_prefix=s", "verbose"))
+ {
+ print STDERR "Try `configure --help'";
+ exit 1;
+ }
+ # Give help, exit immediately.
+ if ($opt_help)
+ {
+ help;
+ exit 0;
+ }
+
+ # We need it early
+ $rootdir = dirname(cwd());
+
+ # Actual configuration thing.
+ $version_make = "$win32_mk_dir/w2cwin32.mak";
+ $paths_make = "$win32_mk_dir/paths.mak";
+ $version_res = "$win32_rc_dir/w2cversion.h";
+
+ # Update the version numbers using arguments.
+
+ # read the current version numbers
+ $current_vars = &read_current($version_make);
+ # flag for checking arguments have been modified.
+ $current_modified = 0;
+
+ $current_modified = &guess_web2c_version;
+
+ $new_vars{'buildmaj'} = $new_vars{'web2cmaj'};
+ $new_vars{'buildmin'} = $new_vars{'web2cmin'};
+ if ($new_vars{'web2cbeta'} =~ /^alpha([0-9]+)$/) {
+ $new_vars{'buildmin'} = $new_vars{'buildmin'} - 1;
+ $new_vars{'buildbeta'} = 9800 + $1;
+ }
+ elsif ($new_vars{'web2cbeta'} =~ /^beta([0-9]+)$/) {
+ $new_vars{'buildmin'} = $new_vars{'buildmin'} - 1;
+ $new_vars{'buildbeta'} = 9900 + $1;
+ }
+ else {
+ $new_vars{'buildbeta'} = $new_vars{'web2cbeta'};
+ if ($new_vars{'buildbeta'} eq '') {
+ $new_vars{'buildbeta'} = 0;
+ }
+ }
+ if ($new_vars{'buildmaj'} ne $current_vars{'buildmaj'}
+ || $new_vars{'buildmin'} ne $current_vars{'buildmin'}
+ || $new_vars{'buildbeta'} ne $current_vars{'buildbeta'}) {
+ $new_vars{'buildgamma'} = 0;
+ }
+
+ $new_vars{'buildgamma'} = $new_vars{'buildgamma'} + 1;
+ $current_modified = 1;
+
+ if ($current_modified != 0) {
+ # replace current version numbers by the new ones
+ foreach $v (@config_vars) {
+ print "$v, $new_vars{$v}\n" if ($opt_verbose);
+ $current_vars{$v} = $new_vars{$v};
+ }
+ }
+
+ $web2cdir = &build_path($rootdir, "texk");
+ if (! -d $web2cdir) {
+ print "$0: no $web2cdir web2c directory !\n";
+ exit 1;
+ }
+
+ # Build the distribution.
+ if ($opt_makedist) {
+ &makedist($opt_makedist);
+ exit 0;
+ }
+
+ # write the new version numbers
+ &write_current($version_make);
+ # and into the res file too. This one is taken from a
+ # template file (.in)
+ &write_res($version_res);
+ # While we are at it, change version numbers in c-auto.h too.
+ # &write_res($c_auto_h);
+
+ # Paths
+ $current_modified = 0;
+ # TeX destiantion directory prefix
+ if ($opt_prefix) {
+ die "Prefix $opt_prefix must be absolute.\n"
+ unless &is_absolute($opt_prefix);
+ $new_paths{'prefix'} = &canon_dir($opt_prefix);
+ $current_modified = 1;
+ }
+ # prefix of the destination dir for other tools
+ if ($opt_tools_prefix) {
+ die "Tools prefix $opt_tools_prefix must be absolute.\n"
+ unless &is_absolute($opt_tools_prefix);
+ $new_paths{'toolsprefix'} = &canon_dir($opt_tools_prefix);
+ $current_modified = 1;
+ }
+ $new_paths{'root_srcdir'} = &canon_dir($rootdir);
+ # read the current value for configuration paths
+ &read_paths;
+ # check the root source directory
+ if ($current_paths{'root_srcdir'} cmp $rootdir) {
+ $current_modified = 1;
+ }
+ # TEXMF and TEXMCNF for documentation and formats
+ $prefix = $new_paths{'prefix'};
+ if (! $prefix) {
+ $prefix = $current_paths{'prefix'};
+ }
+ # look for a plausible texmf
+ $current_modified = 1;
+ # This is TeX Live && fpTeX
+ if (-d "$prefix/texmf") {
+ $new_paths{'TEXMF'} = &canon_dir("$prefix/texmf", '/');
+ $new_paths{'texmf'} = &canon_dir('$(datadir)/texmf', '\\');
+ }
+ # In case of ...
+ elsif (-d "$prefix/share/texmf") {
+ $new_paths{'TEXMF'} = &canon_dir("$prefix/share/texmf", '/');
+ $new_paths{'texmf'} = &canon_dir('$(datadir)/share/texmf', '\\');
+ }
+ else {
+ die "Can't find a plausible TEXMF.\n";
+ }
+
+ $new_paths{'SystemDrive'} = $ENV{"SYSTEMDRIVE"};
+ # BoundsChecker, default location.
+ $new_paths{'BOUNDSCHECKER'} = $ENV{"SYSTEMDRIVE"} . "\\Program Files\\Numega\\BoundsChecker";
+ # PATH: We need to change it because there is a limitation on size,
+ # and simply adding everything would overflow
+ $new_paths{'PATH'} = join ( ";", map {&canon_dir(eval($_))} @path_list );
+ print "PATH = $new_paths{'PATH'}\n";
+ $current_modified = 1;
+ if (-d "$prefix/share/texmf") {
+ $new_paths{'TEXMFMAIN'} = "$prefix/share/texmf";
+ $current_modified = 1;
+ }
+ elsif (-d "$prefix/texmf") {
+ $new_paths{'TEXMFMAIN'} = "$prefix/texmf";
+ $current_modified = 1;
+ }
+ else {
+ $new_paths{'TEXMFMAIN'} = $current_paths{'TEXMFMAIN'};
+ $current_modified = 1;
+ }
+ if ($current_modified) {
+ # replace current paths by the new ones
+ foreach $p (keys %config_paths) {
+ if ($new_paths{$p}) {
+ print "$p, $new_paths{$p}\n" if ($opt_verbose);
+ $current_paths{$p} = $new_paths{$p};
+ }
+ }
+ # rewrite the paths
+ &write_paths;
+ }
+
+ # Generate c-auto.h/config.h/whatever in each directory
+ &export_config($rootdir);
+
+ # install any newer version of texinfo.tex
+ $new_texinfo = "$web2cdir/etc/texinfo.tex";
+ $installed_texinfo = $new_paths{'TEXMFMAIN'} . "/tex/texinfo/texinfo.tex";
+ if (!( -f $installed_texinfo) || &newer($new_texinfo, $installed_texinfo)) {
+ &copy($new_texinfo, $installed_texinfo);
+ print "Copying $new_texinfo to $installed_texinfo.\n";
+ }
+
+ # We could also verify that all the tools needed may be found
+ # &check_tools($version_make)
+
+ print "The distribution is ready for compiling.\n";
+ print "You still have compilation options :\n";
+ print "The prefered way is 'nmake NODEBUG=1 install'\n";
+ print "but you may have a look at $version_make for other options.\n";
+
+}
diff --git a/Build/source/mswin32/diff.exclude b/Build/source/mswin32/diff.exclude
new file mode 100644
index 00000000000..2bf156489d1
--- /dev/null
+++ b/Build/source/mswin32/diff.exclude
@@ -0,0 +1,78 @@
+*.dll
+*.exe
+*.obj
+*.orig
+*.pdb
+*.rej
+*/.cvsignore
+*/CVS/*
+*/diffs/*
+*/dynamic-debug/*
+*/dynamic/*
+*/gnu/*
+*/graphics/*
+*/gstools/*
+*/libs/T1/*
+*/libs/expat/*
+*/libs/freetype2/*
+*/libs/geturl-new/*
+*/libs/geturl/*
+*/libs/gifreader/*
+*/libs/libttf/*
+*/libs/unzip/*
+*/mswin32/*
+*/perl/*
+*/static-debug/*
+*/static/*
+*/texk/cweb/*
+*/texk/cwebk/*
+*/texk/dvipdfm/config.h
+*/texk/dvipdfm/latex-support/*
+*/texk/dvipsk/dvips.info*
+*/texk/kpathsea-fp/*
+*/texk/kpathsea/kpathsea.cps
+*/texk/kpathsea/kpathsea.info*
+*/texk/kpse*/*
+*/texk/kpse-shared*
+*/texk/kpse-shared/*
+*/texk/kpsexx/*
+*/texk/msvc/*.log
+*/texk/msvc/factory
+*/texk/msvc/setupw32/*
+*/texk/tetex/latex.info*
+*/texk/ttfdump/docs/ttfdump.dvi
+*/texk/ttfdump/docs/ttfdump.html
+*/texk/tth/*
+*/texk/web2c/cwebdir/*-w32.ch
+*/texk/web2c/doc/web2c.cps
+*/texk/web2c/doc/web2c.info*
+*/texk/web2c/enctex/*
+*/texk/web2c/eomegadir-1.23/*
+*/texk/web2c/eomegadir-1.15/*
+*/texk/web2c/eomegadir-new/*
+*/texk/web2c/eotrip/*
+*/texk/windvi-0.68/*
+*/texk/gsftopk-new/*
+*/texk/windvi-new/*
+*/texk.development/gsftopk-new/*
+*/texk.development/kpsexx/*
+*/texk.development/windvi-new/*
+*/texk.development/tth/*
+*/texk.development/web2c/eomegadir-1.23/*
+*/texk.development/web2c/eomegadir-1.15/*
+*/texk.development/web2c/eotrip/*
+*/texk.development/ttfdump/docs/ttfdump.dvi
+*/texk.development/ttfdump/docs/ttfdump.html
+*/utils/mminstance-1.23/*
+*/utils/lcdf-typetools-*/*
+*/utils/l2h-orig-orig/*
+*/utils/l2h-orig-orig/*
+*/utils/l2h-orig/*
+*/utils/latex2html/*
+*/utils/noweb/*
+*/utils/src2tex/*
+*/utils/texinfo/info/*
+*/windvi-0.68/*
+*/xemacs/*
+*/backup/*
+*~
diff --git a/Build/source/mswin32/fix-depend.pl b/Build/source/mswin32/fix-depend.pl
new file mode 100644
index 00000000000..a57a16e76f5
--- /dev/null
+++ b/Build/source/mswin32/fix-depend.pl
@@ -0,0 +1,66 @@
+#
+# Split makedepend generated lines
+# to get at most one dependency per line
+# to facilitate diffs
+#
+my $line;
+my $depline;
+my $target;
+my @dep;
+my %dependencies;
+my @preamble;
+my @postamble;
+my @unmatched;
+
+while (<>) {
+ chomp;
+ $line = $_;
+ if ($line =~ m/^#/) {
+ if (keys %dependencies) {
+ push @postamble, $line;
+ }
+ else {
+ push @preamble, $line;
+ }
+ break;
+ }
+ elsif ($line =~ m/^([^\s].*):\s+(.*)$/) {
+ # new dependency
+ $target = $1;
+ push @{$dependencies{$target}}, $2;
+ break;
+ }
+ elsif ($line =~ m/^\s+(.*)\s+\\$/) {
+ # continuation
+ push @{$dependencies{$target}}, $1;
+ break;
+ }
+ elsif ($line =~ m/^\s+(.*)$/) {
+ # final
+ push @{$dependencies{$target}}, $1;
+ break;
+ }
+ else {
+ if ($line =~ m/[^\s]/) {
+ push @unmatched, $line;
+ }
+ }
+
+}
+
+END {
+ map { print "$_\n"; } @preamble;
+ map {
+ print "$_: \\\n";
+ $depline = join (" ", @{$dependencies{$_}});
+ my @dep = split("[ \t]", $depline);
+ @dep = grep { $_ !~ m/^(\s*|\s*\\)$/ } @dep;
+ $depline = join " \\\n\t", @dep;
+ $depline = "\t" . $depline . "\n";
+ print $depline;
+ # skip one line
+ print "\n";
+ } (keys %dependencies);
+ map { print "$_\n"; } @postamble;
+ map { print STDERR "unmatched: $_\n"; } @unmatched;
+}
diff --git a/Build/source/mswin32/fix-eol.bat b/Build/source/mswin32/fix-eol.bat
new file mode 100644
index 00000000000..51a893216b4
--- /dev/null
+++ b/Build/source/mswin32/fix-eol.bat
@@ -0,0 +1,8 @@
+@echo off
+pushd \source\texlive\Build\source.development\TeX\texk\web2c
+rem dir /s/b *.c *.cc *.h *.ch *.ch0 *.ch1 *.ch2 *.mak *.in *.am *.defines | perl \source\fptex\mswin32\global-replace.pl --backup-dir=backup-eol "{ $a=chr(13); $_=~s/$a//g; }"
+rem cd \source\texlive\Build\source.development\TeX
+dir /s/b *.c *.cc *.h *.ch *.ch0 *.ch1 *.ch2 *.mak *.in *.am *.defines | perl \source\fptex\mswin32\global-replace.pl --backup-dir=backup-eol "{ $a=chr(13); $_=~s/$a//g; }"
+rem cd \source\texlive\Master\texmf\tpm
+rem dir /s/b *.tpm | perl \source\fptex\mswin32\global-replace.pl --backup-dir=backup-eol "{ $a=chr(13); $_=~s/$a//g; }"
+popd
diff --git a/Build/source/mswin32/fix-rman.pl b/Build/source/mswin32/fix-rman.pl
new file mode 100644
index 00000000000..29bb0179e32
--- /dev/null
+++ b/Build/source/mswin32/fix-rman.pl
@@ -0,0 +1,32 @@
+#
+# Purpose: create cross references through pages translated
+# by Polyglottman.
+# Author: F. Popineau
+# Date : 10/10/98
+# Time-stamp: <03/05/16 00:28:07 popineau>
+#
+# Usage:
+# rman -f HTML -n file.man file.man | perl fix-rman.pl > file.html
+#
+
+require "newgetopt.pl";
+
+&main;
+
+exit 0;
+
+sub main {
+
+ unless (&NGetOpt ("title=s")) {
+ print STDERR "Usage: $0 --title=name\n";
+ exit 1;
+ }
+
+ while (<>) {
+ # lines to match : <B><A HREF="rman.c.rman.c">mktexmf</B>(1)</A>
+ $_ =~ s/<TITLE>..man.c\(..man.c\) manual page<\/TITLE>/<TITLE>$opt_title manual page<\/TITLE>/ ;
+ $_ =~ s/(.*)<A HREF="rman.c.rman.c">([A-z_0-9-]+)<\/B>\(1\)<\/A>(.*)/$1<A HREF="$2.html">$2<\/B>\(1\)<\/A>$3/ ;
+ print $_;
+ # $_ =~ s/(.*)<A HREF="rman.c.rman.c">([A-z_0-9-]+)<\/B>\(1\)<\/A>(.*)/ ;
+ }
+}
diff --git a/Build/source/mswin32/fix-win32.bat b/Build/source/mswin32/fix-win32.bat
new file mode 100644
index 00000000000..b798e6ea8fa
--- /dev/null
+++ b/Build/source/mswin32/fix-win32.bat
@@ -0,0 +1,4 @@
+rem @echo off
+rem dir /s/b *.tpm | perl \source\fptex\mswin32\global-replace.pl --line-mode --backup-dir=backup-win32 "{ $a=chr(10); $_=~s@^man/man(.)/([^\.]*)\.(.)@texmf/doc/man/man\1/\2.\3${a}texmf/doc/man/man\1/\2.html@; }"
+dir /s/b *.tpm | perl \source\fptex\mswin32\global-replace.pl --line-mode --backup-dir=backup-win32 "{ $a=chr(10); $_=~s@^${a}@@; }"
+rem popd
diff --git a/Build/source/mswin32/global-replace.pl b/Build/source/mswin32/global-replace.pl
new file mode 100644
index 00000000000..b0bc9450d0f
--- /dev/null
+++ b/Build/source/mswin32/global-replace.pl
@@ -0,0 +1,150 @@
+: #-*- Perl -*-
+
+### global-modify --- modify the contents of a file by a Perl expression
+
+## Copyright (C) 1999 Martin Buchholz.
+## Copyright (C) 2001 Ben Wing.
+
+## Authors: Martin Buchholz <martin@xemacs.org>, Ben Wing <ben@xemacs.org>
+## Maintainer: Ben Wing <ben@xemacs.org>
+## Current Version: 1.0, May 5, 2001
+
+# 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, 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 XEmacs; see the file COPYING. If not, write to the Free
+# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+eval 'exec perl -w -S $0 ${1+"$@"}'
+ if 0;
+
+use strict;
+use FileHandle;
+use Carp;
+use Getopt::Long;
+use File::Basename;
+
+(my $myName = $0) =~ s@.*/@@; my $usage="
+Usage: $myName [--help] [--backup-dir=DIR] [--line-mode] [--hunk-mode]
+ PERLEXPR FILE ...
+
+Globally modify a file, either line by line or in one big hunk.
+
+Typical usage is like this:
+
+[with GNU print, GNU xargs: guaranteed to handle spaces, quotes, etc.
+ in file names]
+
+find . -name '*.[ch]' -print0 | xargs -0 $0 's/\bCONST\b/const/g'\n
+
+[with non-GNU print, xargs]
+
+find . -name '*.[ch]' -print | xargs $0 's/\bCONST\b/const/g'\n
+
+
+The file is read in, either line by line (with --line-mode specified)
+or in one big hunk (with --hunk-mode specified; it's the default), and
+the Perl expression is then evalled with \$_ set to the line or hunk of
+text, including the terminating newline if there is one. It should
+destructively modify the value there, storing the changed result in \$_.
+
+Files in which any modifications are made are backed up to the directory
+specified using --backup-dir, or to `backup' by default. To disable this,
+use --backup-dir= with no argument.
+
+Hunk mode is the default because it is MUCH MUCH faster than line-by-line.
+Use line-by-line only when it matters, e.g. you want to do a replacement
+only once per line (the default without the `g' argument). Conversely,
+when using hunk mode, *ALWAYS* use `g'; otherwise, you will only make one
+replacement in the entire file!
+";
+
+my %options = ();
+$Getopt::Long::ignorecase = 0;
+&GetOptions (
+ \%options,
+ 'help', 'backup-dir=s', 'line-mode', 'hunk-mode',
+);
+
+while (<STDIN>) {
+ chomp;
+ if (-f ) {
+ push @ARGV, $_;
+ }
+}
+
+die $usage if $options{"help"} or @ARGV <= 1;
+my $code = shift;
+
+die $usage if grep (-d || ! -w, @ARGV);
+
+sub SafeOpen {
+ open ((my $fh = new FileHandle), $_[0]);
+ binmode($fh);
+ confess "Can't open $_[0]: $!" if ! defined $fh;
+ return $fh;
+}
+
+sub SafeClose {
+ close $_[0] or confess "Can't close $_[0]: $!";
+}
+
+sub FileContents {
+ my $fh = SafeOpen ("< $_[0]");
+ my $olddollarslash = $/;
+ local $/ = undef;
+ my $contents = <$fh>;
+ $/ = $olddollarslash;
+ return $contents;
+}
+
+sub WriteStringToFile {
+ my $fh = SafeOpen ("> $_[0]");
+ binmode $fh;
+ print $fh $_[1] or confess "$_[0]: $!\n";
+ SafeClose $fh;
+}
+
+foreach my $file (@ARGV) {
+ my $changed_p = 0;
+ my $new_contents = "";
+ if ($options{"line-mode"}) {
+ my $fh = SafeOpen $file;
+ while (<$fh>) {
+ my $save_line = $_;
+ eval $code;
+ $changed_p = 1 if $save_line ne $_;
+ $new_contents .= $_;
+ }
+ } else {
+ my $orig_contents = $_ = FileContents $file;
+ eval $code;
+ if ($_ ne $orig_contents) {
+ $changed_p = 1;
+ $new_contents = $_;
+ }
+ }
+
+ if ($changed_p) {
+ my $backdir = $options{"backup-dir"};
+ $backdir = "backup" if !defined ($backdir);
+ if ($backdir) {
+ my ($name, $path, $suffix) = fileparse ($file, "");
+ my $backfulldir = $path . $backdir;
+ my $backfile = "$backfulldir/$name";
+ mkdir $backfulldir, 0755 unless -d $backfulldir;
+ print "modifying $file (original saved in $backfile)\n";
+ rename $file, $backfile;
+ }
+ WriteStringToFile ($file, $new_contents);
+ }
+}
diff --git a/Build/source/mswin32/minimal-perl.pl b/Build/source/mswin32/minimal-perl.pl
new file mode 100644
index 00000000000..d67ab11c00c
--- /dev/null
+++ b/Build/source/mswin32/minimal-perl.pl
@@ -0,0 +1,86 @@
+#
+# Install a minimal perl based on a list of files generated
+# by the PerlApp compiler
+# Author: F. Popineau
+# Date : 04/11/98
+# Time-stamp: <03/08/20 15:24:57 popineau>
+#
+#
+
+BEGIN {
+push @INC, 'c:/source/TeXLive/Master/Tools';
+}
+
+require "newgetopt.pl";
+use FileUtils;
+use Tpm;
+use Cwd;
+
+my $source_perl_dir = "c:/Local/Perl";
+my $source_tcl_dir = "c:/Local/tcl";
+# my $dest_perl_dir = ${Tpm::MasterDir} . "/xemtex/perl";
+my $dest_bin_dir = "c:/Program Files/TeXLive/bin/win32";
+my $dest_perl_dir = "c:/Program Files/TeXLive/xemtex/perl";
+my $perlfilesname = "c:/source/fptex/mswin32/perlfiles.lst";
+my $perlfilesnode;
+
+my @perlfiles;
+
+my %binaries = (
+ "$source_perl_dir/bin" => [ "perl.exe", "perl58.dll" ],
+ "$source_tcl_dir/bin" => [ "tk83.dll" ]
+ );
+
+&main;
+
+1;
+
+sub restrict_perl {
+
+ my ($dir, $dst, @files) = @_;
+ my $node = $perlfilesnode;
+
+ $dir =~ s@^\.@@;
+ $dir =~ s@\\@/@g;
+ $dir =~ s@^/@@;
+
+ my @path = split "/", $dir;
+
+ while (@path) {
+ $node = $node->{shift @path};
+ }
+
+ @files = keys %{$node};
+# print "files = @files\n";
+ return @files;
+}
+
+sub main {
+
+ for my $dir (keys %binaries) {
+ print "dir = $dir\n";
+ for my $f (@{$binaries{$dir}}) {
+ print "f = $f\n";
+ if (&FileUtils::newer("$dir/$f", "${dest_bin_dir}/$f")) {
+ &FileUtils::copy ("$dir/$f", "${dest_bin_dir}/$f");
+ &FileUtils::set_file_time("$dir/$f", "${dest_bin_dir}/$f");
+
+ }
+ }
+ }
+
+ open IN, "<${perlfilesname}";
+ while (<IN>) {
+ chomp;
+ if (/^ file:\s*c:\\Local(\\ActiveState)?\\Perl/) {
+ $_ =~ s/^ file:\s+c:\\Local(\\ActiveState)?\\Perl\\//;
+ $perlfiles{$_} = $_;
+ }
+ }
+ close IN;
+ @perlfiles = sort(keys %perlfiles);
+ $perlfilesnode = &FileUtils::build_tree(@perlfiles);
+
+ &FileUtils::sync_dir($source_perl_dir, $dest_perl_dir, \&restrict_perl, "", 0, 0, 0);
+
+}
diff --git a/Build/source/mswin32/modes-to-cfg.pl b/Build/source/mswin32/modes-to-cfg.pl
new file mode 100644
index 00000000000..120ca5d3ddd
--- /dev/null
+++ b/Build/source/mswin32/modes-to-cfg.pl
@@ -0,0 +1,44 @@
+#
+# Perl script for processing modes.mf and build 2 char**
+# initialized with modes and bpdi values.
+#
+
+&main;
+
+1;
+
+sub main {
+ local($modes_file, $m, $dpi);
+
+ $modes_file = `kpsewhich modes.mf`;
+ if ($modes_file eq "") {
+ print "Can't find modes.mf !\nAborting...";
+ exit 1;
+ }
+ open IN, "<$modes_file";
+ $m = "";
+ while (<IN>) {
+ if ($_ =~ m/^mode_def\s+([^\s]+)\s+=\s+.*\\\[\s*(.*)\s*$/) {
+ $m = $1;
+ push @list_modes, $m;
+ push @list_desc, $2;
+ $count ++;
+ }
+ elsif ($_ =~ m/mode_param\s*\(\s*pixels_per_inch\s*,\s*([0-9\.]+)\s*\)/) {
+ $bdpi = $1;
+ push @list_bdpi, $bdpi;
+ }
+ }
+ close IN;
+
+ # print lists
+ open OUT, ">mfmodes.h";
+ print OUT "typedef struct _mfmode {\n\tchar *name;\n\tchar *bdpi;\n\tchar *desc;\n\t} mfmode;\n\n";
+ print OUT "mfmode avail_modes[$count] = {\n";
+
+ for ($i = 0; $i < $count - 1; $i++) {
+ print OUT "\t{\"$list_modes[$i]\", \"$list_bdpi[$i]\", \"$list_desc[$i]\"},\n";
+ }
+ print OUT "\t{\"$list_modes[$i]\", \"$list_bdpi[$i]\", \"$list_desc[$i]\"}\n\t};\n";
+
+}
diff --git a/Build/source/mswin32/newbuild.pl b/Build/source/mswin32/newbuild.pl
new file mode 100644
index 00000000000..8b8549f3afa
--- /dev/null
+++ b/Build/source/mswin32/newbuild.pl
@@ -0,0 +1,386 @@
+## newbuild.pl: prepare a TeXLive build -*- Perl -*-
+##
+## Copyright (C) 2002 Fabrice Popineau <Fabrice.Popineau@supelec.fr>
+## derived from the MiKTeX newbuild.pl perl script
+##
+## This file 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, or (at your
+## option) any later version.
+##
+## This file 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 file; if not, write to the Free Software
+## Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+## USA.
+
+use strict;
+use Cwd;
+use File::Path;
+use File::Basename;
+use Getopt::Long;
+use File::DosGlob 'glob';
+
+my $texlivesrcdir;
+my $major_version_number;
+my $minor_version_number;
+my $version_string;
+my $patch_number_str;
+my $mscver;
+my $opt_prefix;
+my $opt_help;
+my $opt_alpha;
+my $opt_beta;
+my $opt_offical;
+my $opt_debug;
+my $opt_tmdir;
+my $opt_snapshot;
+my $opt_official;
+my $release_motto;
+my $build_label;
+my $build_special_str;
+my $build_number;
+my $state;
+my $beta_number;
+my $alpha_number;
+my $build_date_str;
+my $builder_name_str;
+my $computer_name_str;
+my $build_date;
+my $patch_number;
+
+&main;
+exit (0);
+
+###############################################################################
+## help
+###############################################################################
+
+sub help
+{
+ print <<EOF;
+Usage: newbuild [OPTIONS]
+ --alpha initialize an alpha build
+ --beta initialize a beta build
+ --debug initialize a debug build
+ --help display this help text and exit
+ --official initialize an official build
+ --prefix=DIR install all files in DIR
+ --tmdir=DIR where Total Texlive is installed
+ --snapshot initialize a snapshot build
+EOF
+}
+
+###############################################################################
+## make_version_h
+###############################################################################
+
+sub make_version_h
+{
+ $version_string = $major_version_number;
+
+ if ($minor_version_number > 0)
+ {
+ $version_string .= ".$minor_version_number";
+ }
+
+ $version_string .= $patch_number_str;
+
+ if ($build_special_str)
+ {
+ $version_string .= " $build_special_str";
+ }
+
+ if ($state == 1)
+ {
+ $version_string .= " (snapshot build $build_number)";
+ }
+ elsif ($state == 2)
+ {
+ $version_string .= " beta $beta_number";
+ }
+ elsif ($state == 3)
+ {
+ $version_string .= " alpha $alpha_number";
+ }
+ elsif ($state == 4)
+ {
+ $version_string .= " (debug build $build_number)";
+ }
+
+ my $version_h_filename = $texlivesrcdir . "./texlive-version.h";
+
+ open (VERSION_H, ">$version_h_filename");
+
+ print VERSION_H <<EOF;
+/* Made by newbuild.pl; DO NOT EDIT !!! -*- C -*- */
+#ifndef VERSION__9C077E32_49F9_4a99_9A1F_3E4C4DB17C7D__INCLUDED_H_
+#define VERSION__9C077E32_49F9_4a99_9A1F_3E4C4DB17C7D__INCLUDED_H_
+#define TEXLIVE_PRODUCTNAME_STR "TeXLive"
+#define TEXLIVE_COMPANYNAME_STR "TeX Users Group"
+#define TEXLIVE_BUILD_COMMENT_STR "Build $build_number ($build_label); build date: $build_date_str; machine: $computer_name_str"
+#define TEXLIVE_BUILD_DATE $build_date
+#define TEXLIVE_BUILDERNAME_STR "$builder_name_str"
+#define TEXLIVE_PRIVATEBUILD_STR "Built by $builder_name_str"
+#define TEXLIVE_MAJOR_VERSION $major_version_number
+#define TEXLIVE_MINOR_VERSION $minor_version_number
+#define TEXLIVE_BETA_NUMBER $beta_number
+#define TEXLIVE_BETA_NUMBER_STR "$beta_number"
+#define TEXLIVE_ALPHA_NUMBER $alpha_number
+#define TEXLIVE_ALPHA_NUMBER_STR "$alpha_number"
+#define TEXLIVE_PATCH_NUMBER $patch_number
+#define TEXLIVE_PATCH_NUMBER_STR "$patch_number_str"
+#define TEXLIVE_BUILD_LABEL "$build_label"
+#define TEXLIVE_BUILD_NUMBER $build_number
+#define TEXLIVE_BUILD_SPECIAL_STR "$build_special_str"
+#define TEXLIVE_MAJOR_VERSION_STR "$major_version_number"
+#define TEXLIVE_MINOR_VERSION_STR "$minor_version_number"
+#define TEXLIVE_BETA_VERSION_STR "$beta_number"
+#define TEXLIVE_ALPHA_VERSION_STR "$alpha_number"
+#define TEXLIVE_BUILD_NUMBER_STR "$build_number"
+#define TEXLIVE_RELEASE_STATE $state
+#define TEXLIVE_RELEASE_MOTTO_STR "$release_motto"
+#define TEXLIVE_PRODUCTVERSION_STR "$version_string"
+#define TEXLIVE_LIBRARYPREFIX_STR "tl$major_version_number$minor_version_number"
+#ifndef TEXLIVE_LEGALCOPYRIGHT_STR
+#define TEXLIVE_LEGALCOPYRIGHT_STR "Copyright (C) 1996-2003 Fabrice Popineau and the TeX Users Group"
+#endif
+#ifndef TEXLIVE_LEGALTRADEMARKS_STR
+#define TEXLIVE_LEGALTRADEMARKS_STR ""
+#endif
+#endif
+EOF
+
+ close (VERSION_H);
+}
+
+###############################################################################
+## update_tpm_files
+###############################################################################
+
+sub update_tpm_files
+{
+# my $x;
+# foreach $x (glob "tpm\\*.tpm")
+# {
+# open TPM, $x;
+# open TPM_NEW, ">$x.new";
+# while (<TPM>)
+# {
+# s-<TPM:Version>.*</TPM:Version>-<TPM:Version>$version_string</TPM:Version>-;
+# s-<TPM:Date>.*</TPM:Date>-<TPM:Date>$build_date_str</TPM:Date>-;
+# print TPM_NEW $_;
+# }
+# close TPM_NEW;
+# close TPM;
+# unlink $x;
+# rename "$x.new", $x;
+# }
+}
+
+###############################################################################
+## mscver
+###############################################################################
+
+sub mscver
+{
+ open MSCVER, ">mscver.c";
+ print MSCVER <<EOF;
+#include <stdio.h>
+void main (void) { printf ("%d", _MSC_VER); }
+EOF
+ close MSCVER;
+ system "cl /nologo mscver.c";
+ $mscver = `mscver`;
+ unlink ("mscver.c");
+ unlink ("mscver.obj");
+ unlink ("mscver.exe");
+}
+
+###############################################################################
+## write_paths_ini
+###############################################################################
+
+# sub write_paths_ini
+# {
+# system "nmake -f texlive.mak configure"
+# }
+
+###############################################################################
+## main
+###############################################################################
+
+sub main
+{
+ unless (GetOptions("alpha" => \$opt_alpha,
+ "beta" => \$opt_beta,
+ "help" => \$opt_help,
+ "official" => \$opt_official,
+ "prefix=s" => \$opt_prefix,
+ "tmdir=s" => \$opt_tmdir,
+ "debug" => \$opt_debug,
+ "snapshot" => \$opt_snapshot))
+ {
+ print STDERR "Try `newbuild --help'";
+ exit (1);
+ }
+
+ if ($opt_help)
+ {
+ help ();
+ exit (0);
+ }
+
+ my($ss,$mm,$hh,$mday,$mon,$year) = localtime();
+
+ $builder_name_str = $ENV{"USERNAME"};
+ $computer_name_str = $ENV{"COMPUTERNAME"};
+
+ my $new_state = -1;
+ $new_state = 4 if ($opt_debug);
+ $new_state = 3 if ($opt_alpha);
+ $new_state = 2 if ($opt_beta);
+ $new_state = 1 if ($opt_snapshot);
+ $new_state = 0 if ($opt_official);
+
+ $texlivesrcdir = &dirname(cwd()) . "/texk/msvc";
+
+ $texlivesrcdir =~ s:/:\\:g;
+
+ my $texlive_inc_filename = $texlivesrcdir . "/texlive.inc";
+
+ die "$texlive_inc_filename does not exist" unless (-e $texlive_inc_filename);
+ open (TEXLIVE_INC, $texlive_inc_filename);
+
+ open (TMPFILE, ">xxx");
+ $state = -1;
+ my $last_state = -1;
+
+ mscver ();
+
+ my $timestamp = sprintf("%02d/%02d/%02d %02d:%02d:%02d %s",
+ $year, $mon+1, $mday, $hh, $mm, $ss,
+ $ENV{"USERNAME"});
+
+ while (<TEXLIVE_INC>)
+ {
+ if (/^state = ([01234])/)
+ {
+ $state = $1;
+ $state = $new_state if ($new_state >= 0);
+ print TMPFILE "state = $state\n";
+ }
+ elsif (/^alpha_number = ([0-9]+)/)
+ {
+ $alpha_number = $1;
+ print TMPFILE "alpha_number = $alpha_number\n";
+ }
+ elsif (/^beta_number = ([0-9]+)/)
+ {
+ $beta_number = $1;
+ print TMPFILE "beta_number = $beta_number\n";
+ }
+ elsif (/^release_motto = (.*)/)
+ {
+ $release_motto = $1;
+ print TMPFILE $_;
+ }
+ elsif (/^build_label = ([A-Za-z0-9_-]+)/)
+ {
+ $build_label = $1;
+ print TMPFILE $_;
+ }
+ elsif (/^build_special_str = ([A-Za-z0-9 ]+)/)
+ {
+ $build_special_str = $1;
+ print TMPFILE $_;
+ }
+ elsif (/^(build_number = )([0-9]+)/)
+ {
+ $build_number = $2 + 1;
+ print TMPFILE $1, $build_number, "\n";
+ }
+ elsif (/^build_date = /)
+ {
+ $build_date = time ();
+ print TMPFILE $&, $build_date, "\n";
+ }
+ elsif (/^build_date_str = /)
+ {
+ $build_date_str = localtime ();
+ print TMPFILE $&, $build_date_str . "\n";
+ }
+ elsif (/^texlivesrcdir = /)
+ {
+ print TMPFILE $&, $texlivesrcdir . "\n";
+ }
+ elsif (/^prefix = /)
+ {
+ if (length($opt_prefix) > 0)
+ {
+ print TMPFILE $&, $opt_prefix . "\n";
+ }
+ else
+ {
+ print TMPFILE $&, $ENV{"HOMEDRIVE"} . "\\texmf\n";
+ }
+ }
+ elsif (/^tmdir = /)
+ {
+ if (length($opt_tmdir) > 0)
+ {
+ print TMPFILE $&, "$opt_tmdir\n";
+ }
+ else
+ {
+ print TMPFILE $&, "\$(prefix)\n";
+ }
+ }
+ elsif (/^mscver = /)
+ {
+ print TMPFILE $&, $mscver . "\n";
+ }
+ else
+ {
+ if (/^major_version_number = ([0-9]+)/)
+ {
+ $major_version_number = $1;
+ }
+ elsif (/^minor_version_number = ([0-9]+)/)
+ {
+ $minor_version_number = $1;
+ }
+ elsif (/^patch_number = ([0-9]+)/)
+ {
+ $patch_number = $1;
+ }
+ elsif (/^patch_number_str = ([a-z])/)
+ {
+ $patch_number_str = $1
+ }
+ else
+ {
+ s/Time-stamp:[ \t]+\"(.+)\"/Time-stamp: \"$timestamp\"/;
+ }
+ print TMPFILE;
+ }
+ }
+
+ close (TEXLIVE_INC);
+ close (TMPFILE);
+ unlink ($texlive_inc_filename);
+ rename ("xxx", $texlive_inc_filename);
+
+ make_version_h ();
+
+ update_tpm_files ();
+
+# if ($opt_tmdir && $opt_prefix)
+# {
+# write_paths_ini ();
+# }
+}
diff --git a/Build/source/mswin32/p4update.pl b/Build/source/mswin32/p4update.pl
new file mode 100644
index 00000000000..8c0e222029d
--- /dev/null
+++ b/Build/source/mswin32/p4update.pl
@@ -0,0 +1,140 @@
+#
+# Perforce interface for TeXLive
+# Author: F. Popineau
+# Date : 04/11/98
+# Time-stamp: <03/03/16 12:22:48 popineau>
+#
+# Usage:
+# p4update <option>
+#
+#
+
+use lib 'c:/source/TeXLive/Master/Tools';
+
+require "newgetopt.pl";
+
+use FileUtils qw(dirname basename normalize walk_dir cleandir sort_uniq
+ copy remove_list push_uniq newer sync_dir build_path);
+
+use Cwd;
+
+$ENV{P4PORT} = "xemtex.ese-metz.fr:1666";
+$ENV{P4CLIENT} = "ansible";
+
+%root = (
+ "xemtex" =>"c:/source/xemtex",
+ "texlive" => "c:/source/TeXLive"
+ );
+%p4port = (
+ "xemtex" =>"xemtex.ese-metz.fr:1666",
+ "texlive" => "sun.dante.de:1666"
+ );
+%p4client = (
+ "xemtex" => "ansible",
+ "texlive" => "ansible"
+ );
+
+&main;
+0;
+
+sub main {
+
+ unless (&NGetOpt (
+ "project=s", # Name of the project, changes the P4PORT and P4CLIENT variables
+ "subdir=s", # Subdir to restrict the sync/update operation
+ "dry", # Do nothing, just show what commands would be run
+ "sync", # Sync local depot with remote files
+ "update", # Push your local changes to the remote depot
+ "submit=s" # Run 'p4 submit' in addition to update
+ )) {
+ print STDERR "Try `$0 --help'";
+ exit 1;
+ }
+
+ if (! $opt_project) {
+ $opt_project = "texlive";
+ }
+
+ my $rootprj = $root{$opt_project};
+ my $p4clientprj = $p4client{$opt_project};
+ my $p4portprj = $p4port{$opt_project};
+ my $p4rootprj = "//$p4clientprj";
+ $ENV{"P4CLIENT"} = $p4clientprj;
+ $ENV{"P4PORT"} = $p4portprj;
+ my $subdir = "";
+ my $dir = "";
+
+
+ if ($opt_subdir ne "") {
+ $subdir = $opt_subdir;
+ }
+
+ $dir = build_path($rootprj, $subdir);
+
+ if (! -d $dir) {
+ print STDERR "$0: $dir is not a directory, exiting...\n";
+ exit 1;
+
+ }
+
+ print "P4PORT = " . $ENV{"P4PORT"} . "\nP4CLIENT = " . $ENV{"P4CLIENT"} . "\n";
+
+ $cwd = &getcwd;
+
+ if ($opt_sync) {
+ $dir = normalize($dir, "/");
+ $dir =~ s/^$rootprj/$p4rootprj/;
+ $dir = $dir . "/...";
+ if ($opt_dry) {
+ print STDERR "Executing \"p4 sync $dir\"\n";
+ }
+ else {
+ system("p4 sync $dir");
+ }
+ }
+ elsif ($opt_update) {
+ if ($opt_dry) {
+ print STDERR "Changing directory for $dir\n";
+ print STDERR "Executing \"dir /s /b /a-d | p4 -x - add\"\n";
+ print STDERR "Changing directory for $cwd\n";
+ }
+ else {
+ chdir($dir);
+ system("dir /s /b /a-d | p4 -x - add");
+ chdir ($cwd);
+ }
+ $dir = normalize($dir, "/");
+ $dir =~ s/^$rootprj/$p4rootprj/;
+ $dir = $dir . "/...";
+
+ if ($opt_dry) {
+ print STDERR "Executing \"p4 diff -sd $dir | p4 -x - delete\"\n";
+ print STDERR "Executing \"p4 diff -se $dir | p4 -x - edit\"\n";
+ }
+ else {
+ system("p4 diff -sd $dir | p4 -x - delete");
+ system("p4 diff -se $dir | p4 -x - edit");
+ }
+ if ($opt_submit) {
+ $opt_submit = $dir if ($opt_submit !~ m/-c/);
+ if ($opt_dry) {
+ print STDERR "Executing \"p4 submit $opt_submit\"\n";
+ }
+ else {
+ system("p4 submit $opt_submit");
+ }
+ }
+ }
+ elsif ($opt_submit) {
+ $dir = normalize($dir, "/");
+ $dir =~ s/^$rootprj/$p4rootprj/;
+ $dir = $dir . "/...";
+ $opt_submit = $dir if ($opt_submit !~ m/-c/);
+ if ($opt_dry) {
+ print STDERR "Executing \"p4 submit $opt_submit\"\n";
+ }
+ else {
+ system("p4 submit $opt_submit");
+ }
+ }
+}
diff --git a/Build/source/mswin32/place.pl b/Build/source/mswin32/place.pl
new file mode 100644
index 00000000000..63f1b2f90f7
--- /dev/null
+++ b/Build/source/mswin32/place.pl
@@ -0,0 +1,248 @@
+#! /usr/bin/perl
+
+# Sebastian Rahtz 2000/02/05
+# Process a tree in the texlive "cooked" directory and put
+# in the main texmf tree, with an RDF catalogue entry
+
+use lib 'c:/source/TeXLive/Master/texmf/tpm';
+
+use English;
+use File::Basename;
+use File::Find;
+use Time::gmtime;
+use Cwd;
+use FileUtils qw(walk_dir rec_rmdir);
+
+require "newgetopt.pl";
+
+$IsWin32 = $^O =~ /win32/i;
+
+$newpackage=0;
+$Inidir = getcwd();
+$Master="d:/local/texlive";
+$package=$ARGV[0];
+$collection=$ARGV[1];
+$Runsize=0;
+$Docsize=0;
+$Sourcesize=0;
+@Docfiles=();
+@Sourcefiles=();
+@Runfiles=();
+@zapped=();
+
+# zap_empty_dirs
+$zap_noaction = 1;
+$zap_regexp = "^(\\.zipped|\\.cache|\\.cache\\+|00Contents|00Description)\$";
+
+&main;
+
+exit 0;
+
+# checks whether only files matching regexp are contained in
+# dir-name and removes the directory if this is the case.
+# -debug prints out what it does
+# -noaction suppresses the deletion
+
+sub zap_empty_dirs {
+
+ my($dir_name, @all_files) = @_;
+ my (@files);
+
+ @files = grep(! /$zap_regexp/,@all_files);
+
+ if ($#files < 0) {
+ print "Empty directory: $dir_name\n";
+ &rec_rmdir($dir_name) if (! $zap_noaction);
+ }
+}
+
+sub main {
+
+
+ unless (&NGetOpt ("package=s", "master=s",
+ "verbose", "help")) {
+ print STDERR "Try `$0 --help'";
+ exit 1;
+ }
+
+ if ($opt_help) {
+ &help;
+ exit 0;
+ }
+
+ $package = $opt_package if ($opt_package ne "");
+ $Master = $opt_master if ($opt_master ne "");
+
+ if (!-d "$package") {
+ die "No package to install: $package\n";
+ }
+
+ # delete existing files
+ chdir("$Master") || die ("directory $Master does not exist");
+
+ if (-f "$Master/texmf/tpm/$package.tpm") {
+ open(LIST,"$Master/texmf/tpm/$package.tpm");
+ while (<LIST>) {
+ chop;
+ if (/^[A-z]/) { $Old{$_}=1; }
+ }
+ close(LIST);
+ }
+ # remove empty directories from new package
+ # finddepth(\&dirs,"$Inidir/$package");
+
+ # build catalogue file
+ $_=$collection;
+ ($coll,$level) = /([A-z]*)([0-9]*)/;
+ chdir("$Master");
+ if (-f "$Master/texmf/lists/$collection/$package") {
+ system "p4 edit $Master/texmf/lists/$collection/$package";
+ system "p4 edit $Master/texmf/tpm/$package.tpm";
+ } else {
+ $newpackage=1;
+ }
+ open(TPM,">$Master/texmf/tpm/$package.tpm");
+
+# $Date=`date +%Y/%m/%d`;
+ $gm = gmtime();
+ $Date = sprintf("%02d/%02d/%02d", $gm->year() + 1900, $gm->mon(), $gm->wday());
+ if ($IsWin32) {
+ $Who = $ENV{"USERNAME"};
+ if ($Who eq "") {
+ $Who = "TeXLive Team";
+ }
+ }
+ else {
+ $Who=`whoami`;
+ chop($Who);
+ }
+
+ &walk_dir("$Inidir/$package", \&zap_empty_dirs);
+
+# chdir("$Inidir/$package");
+# system("find . -depth -type d -exec /texlive/Build/cdbuild/zap-empty-dirs -debug {} ;");
+ find(\&files,".");
+ print TPM <<EOF;
+<?xml version="1.0"?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:TPM="http://texlive.dante.de/">
+ <rdf:Description about="http://texlive.dante.de/$1">
+ <TPM:Name>$package</TPM:Name>
+ <TPM:Collection>$coll</TPM:Collection>
+ <TPM:Level>$level</TPM:Level>
+ <TPM:Date>$Date</TPM:Date>
+ <TPM:Creator>$Who</TPM:Creator>
+ <TPM:DocFiles size="$Docsize">
+EOF
+ foreach $file (@Docfiles) {print TPM "$file\n";}
+ print TPM " </TPM:DocFiles>\n";
+ print TPM " <TPM:SourceFiles size=\"$Sourcesize\">\n";
+ foreach $file (@Sourcefiles) {print TPM "$file\n";}
+ print TPM " </TPM:SourceFiles> \n";
+ print TPM " <TPM:RunFiles size=\"$Runsize\">\n";
+ foreach $file (@Runfiles) {print TPM "$file\n";}
+ print TPM "texmf/tpm/$package.tpm\n";
+ print TPM " </TPM:RunFiles>\n";
+ if (-f "$Master/texmf/doc/html/catalogue/entries/$package.xml") {
+ system("xt $Master/texmf/doc/html/catalogue/entries/$package.xml /texlive/Build/cdbuild/cat2rdf.xsl $$.xml") ;
+ open(XX,"$$.xml");
+ while (<XX>) { print TPM; }
+ close XX;
+ unlink "$$.xml";
+ }
+ else
+ {
+ print TPM "<TPM:Title>\n\n</TPM:Title>\n<TPM:Description>\n\n</TPM:Description>\n";
+ }
+ print TPM <<EOF;
+ </rdf:Description>
+</rdf:RDF>
+EOF
+ close(TPM);
+ system "xt $Master/texmf/tpm/$package.tpm /texlive/Build/cdbuild/tpm2list.xsl";
+ $New{"texmf/tpm/$package.tpm"}=1;
+ $Old{"texmf/tpm/$package.tpm"}=1;
+ foreach $file (keys %Old) {
+ if ($New{$file}) {
+ system "p4 edit $Master/$file";
+ } else {
+ system "p4 delete $Master/$file";
+ }
+ }
+ # copy files
+ $Job="tar cf - . | (cd $Master ; tar xf - )";
+ system($Job);
+
+ foreach $file (keys %New) {
+ if ($Old{$file}) { } else { system "p4 add $Master/$file"; }
+ }
+ if ($newpackage)
+ {system "p4 add $Master/texmf/lists/$collection/$package";
+ system "p4 add $Master/texmf/tpm/$package.tpm";
+ }
+ chdir("$Inidir");
+ system("mv $package $package.done");
+}
+
+#--------------------------------------
+sub dirs {
+ local @filenames;
+ if (-d) {
+ @filenames=&buildfilelist($File::Find::name,$_);
+ if (!@filenames) {
+ rmdir $File::Find::name;
+ }
+ }
+}
+
+# sub cleanup {
+# local ($msg) = @_;
+# print STDERR $msg;
+# exit 1;
+# }
+
+sub buildfilelist {
+ local($me,$name) = @_;
+ my (@files);
+ opendir(DIR,$me) || &cleanup ("cannot open directory $me");
+ @files =grep(!/^\.\.?/,readdir(DIR));
+ closedir(DIR);
+ return @files;
+}
+
+sub files {
+ if (-f) {
+ $This=$File::Find::name;
+ $This =~ s/^\.\///;
+ $New{$This}=1;
+ if ($This =~ /^texmf\/doc/) {
+ # $_=$This;
+ # if (/\.ps$/) { system("gzip $_"); $This="$_.gz" ; }
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($This);
+ $Docsize+=$size; push @Docfiles,$This;
+ }
+ elsif ($This =~ /^Books/) {
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($This);
+ $Docsize+=$size; push @Docfiles,$This; }
+ elsif ($This =~ /^man/) {
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($This);
+ $Docsize+=$size; push @Docfiles,$This; }
+ elsif ($This =~ /^texmf\/source/) {
+ $_=$This;
+ #if (/\.ps$/) { system("gzip $_"); $This="$_.gz" ; }
+ $Sourcesize+=$size; push @Sourcefiles,$This; }
+ else {
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($This);
+ $Runsize+=$size;
+ push @Runfiles,$This;
+ }
+ }
+}
diff --git a/Build/source/mswin32/setvars.bat b/Build/source/mswin32/setvars.bat
new file mode 100644
index 00000000000..8bfe11fbda4
--- /dev/null
+++ b/Build/source/mswin32/setvars.bat
@@ -0,0 +1,11 @@
+@echo off
+rem Because of a bug in nmake, these variables have to be set
+rem before running nmake, for their values to be overriden by
+rem those from the Makefile
+set TEXMFMAIN=foo
+set TEXMF=foo
+set TEXMFCNF=foo
+set MKTEXFMT=foo
+set GROFF_TMAC_PATH=foo
+set GROFF_FONT_PATH=foo
+set LATEX2HTML=foo \ No newline at end of file
diff --git a/Build/source/mswin32/sync.pl b/Build/source/mswin32/sync.pl
new file mode 100644
index 00000000000..d4d0342cf7c
--- /dev/null
+++ b/Build/source/mswin32/sync.pl
@@ -0,0 +1,181 @@
+require "newgetopt.pl";
+use lib ("c:/source/texlive/Master/Tools");
+use Cwd;
+use FileUtils qw(dirname basename normalize walk_dir cleandir sort_uniq
+ copy remove_list push_uniq newer sync_dir canon_dir
+ is_absolute build_path);
+use File::Copy qw(copy);
+
+my @ignore = (
+ "libs/gifreader",
+ "libs/geturl",
+ "libs/geturl-new",
+ "libs/freetype2",
+ "libs/expat",
+ "libs/libttf",
+ "libs/T1",
+ "libs/unzip",
+ "texk/kpathsea-fp",
+ "texk/kpsexx",
+ "texk/tth",
+ "texk/windvi-0.68",
+ "utils/l2h-orig",
+ "utils/l2h-orig-orig",
+ "utils/latex2html",
+ "utils/noweb",
+ "utils/src2tex",
+ "utils/texinfo/info",
+ "texk.stable",
+ "texk/kpse-shared*",
+ "texk/cwebk",
+ "texk/msvc/factory",
+ "texk/kpse.*",
+ "texk/web2c/eomegadir/.*",
+ "texk/web2c/eomegadir-1.15/.*",
+ "texk/web2c/eomegadir-1.23/.*",
+ "CVS"
+ );
+
+# $ignore_regexp = "(" . join ( '|', map { s/^/.\\/ ; s/\//\\/g; $_ } @ignore) . ")";
+my $ignore_regexp = "(" . join ( '|', @ignore) . ")";
+
+&main;
+
+1;
+
+sub restrict_win {
+ my ($dir, $dst, @files) = @_;
+ # under the texk/msvc dir, we don't want to copy all the files
+ $dir =~ s/^\.//;
+ $dir = &getcwd . $dir;
+ $dir =~ s@\\@/@g;
+ if ($dir =~ m@/msvc$@) {
+ @files = grep { /(\.h|\.mak|\.sed|\.pl|\.pm|\.bat|\.inc|\.version)$/ } @files;
+ }
+ # only .mak and .rc files under most directories
+ elsif ($dir eq '.' || ($dir =~ m@/(texk|libs|utils)@ && $dir !~ m@$ignore_regexp@xo)) {
+# map { if ($dir =~ m@[/\\]$_@) { @files = (); return @files; } } @ignore;
+ @files = grep { (-d "$dir/$_") || ($_ =~ m/(\.mak|\.rc)$/) } @files;
+ }
+ # don't bother with other directories
+ else {
+ @files = ();
+ }
+ return @files;
+}
+
+sub restrict_unix {
+ my ($dir, $dst, @files) = @_;
+ $dir =~ s/^\.//;
+ $dir = &getcwd . $dir;
+ $dir =~ s@\\@/@g;
+ # Unix autoconf files
+ if ($dir eq '.' || $dir =~ m@[/\\](texk|libs|utils)@ && $dir !~ m@$ignore_regexp@xo) {
+ @files = grep { /(Makefile\.in|config|configure|configure\.in|config\.guess|config\.sub|c-auto\.in|\.mk)$/ || (-d "$dir/$_") } @files;
+ }
+ # don't bother with other directories
+ else {
+ @files = ();
+ }
+ return @files;
+}
+
+sub restrict_mswin32 {
+ my ($dir, $dst, @files) = @_;
+
+ @files = grep /(README|\.exclude|\*.pm|\.pl|\.bat|\.txt)$/, @files;
+
+}
+
+sub restrict_standard {
+ my ($dir, $dst, @files) = @_;
+ $dir =~ s/^\.//;
+ $dir = &getcwd . $dir;
+ $dir =~ s@\\@/@g;
+
+ if ($dir =~ m@/CVS$@) {
+ @files = ();
+ }
+ else {
+ @files = grep { $_ !~ /^(\.nosearch|\.cvsignore)$/ } @files ;
+ }
+
+ return @files;
+}
+
+sub main {
+
+ unless (&NGetOpt ("dry", "mirror", "sources", "texmf", "restrict")) {
+ print STDERR "Try `$0 --help'";
+ exit 1;
+ }
+
+ $opt_verbose = 1;
+
+ if ($opt_sources) {
+ local ($f1, $f2);
+ $f1 = "c:/source/fptex/libs";
+ $f2 = "c:/source/texlive/Build/source/TeX/libs";
+ &sync_dir($f1, $f2, \&restrict_win, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ &sync_dir($f2, $f1, \&restrict_unix, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ $f2 = "c:/source/texlive/Build/source.development/TeX/libs";
+ &sync_dir($f1, $f2, \&restrict_win, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ &sync_dir($f2, $f1, \&restrict_unix, "", $opt_dry != 0, $opt_mirror != 0, 1);
+
+ $f1 = "c:/source/fptex/utils";
+ $f2 = "c:/source/texlive/Build/source/TeX/utils";
+ &sync_dir($f1, $f2, \&restrict_win, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ &sync_dir($f2, $f1, \&restrict_unix, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ $f2 = "c:/source/texlive/Build/source.development/TeX/utils";
+ &sync_dir($f1, $f2, \&restrict_win, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ &sync_dir($f2, $f1, \&restrict_unix, "", $opt_dry != 0, $opt_mirror != 0, 1);
+
+ $f1 = "c:/source/fptex/texk";
+ $f2 = "c:/source/texlive/Build/source/TeX/texk";
+ &sync_dir($f1, $f2, \&restrict_win, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ &sync_dir($f2, $f1, \&restrict_unix, "", $opt_dry != 0, $opt_mirror != 0, 1);
+
+ $f1 = "c:/source/fptex/texk.development";
+ $f2 = "c:/source/texlive/Build/source.development/TeX/texk";
+ &sync_dir($f1, $f2, \&restrict_win, "", $opt_dry != 0, $opt_mirror != 0, 1);
+ &sync_dir($f2, $f1, \&restrict_unix, "", $opt_dry != 0, $opt_mirror != 0, 1);
+
+ $f1 = "c:/source/fptex/mswin32";
+ $f2 = "c:/source/texlive/Build/source/TeX/mswin32";
+ &sync_dir($f1, $f2, \&restrict_mswin32, "", $opt_dry != 0, $opt_mirror != 0, 1);
+
+ $f1 = "c:/source/fptex/mswin32";
+ $f2 = "c:/source/texlive/Build/source.development/TeX/mswin32";
+ &sync_dir($f1, $f2, \&restrict_mswin32, "", $opt_dry != 0, $opt_mirror != 0, 1);
+
+ }
+ elsif ($opt_texmf) {
+ local ($f1, $f2) = ("c:/source/texlive/Master/texmf",
+ "c:/Program Files/TeXLive/texmf");
+ my $restrict = ($opt_restrict ? \&restrict_standard : "");
+ &sync_dir($f1, $f2, $restrict , "", $opt_dry != 0, $opt_mirror != 0, 0);
+ ($f1, $f2) = ("c:/source/texlive/Master/texmf-dist",
+ "c:/Program Files/TeXLive/texmf-dist");
+ &sync_dir($f1, $f2, $restrict, "", $opt_dry != 0, $opt_mirror != 0, 0);
+ ($f1, $f2) = ("c:/source/texlive/Master/texmf-doc",
+ "c:/Program Files/TeXLive/texmf-doc");
+ &sync_dir($f1, $f2, $restrict, "", $opt_dry != 0, $opt_mirror != 0, 0);
+ }
+ else {
+ local ($f1, $f2) = @ARGV;
+
+ die "$f1 is not a directory!\n" if (! -d $f1);
+ die "$f2 is not a directory!\n" if (! -d $f2);
+
+ $f1 = &canon_dir( &build_path(&getcwd, "$f1")) if (! &is_absolute($f1));
+ $f2 = &canon_dir( &build_path(&getcwd, "$f2")) if (! &is_absolute($f2));
+
+ if ($opt_restrict) {
+ &sync_dir($f1, $f2, \&restrict_standard, "", $opt_dry != 0, $opt_mirror != 0, 0);
+ }
+ else {
+ &sync_dir($f1, $f2, "", "", $opt_dry != 0, $opt_mirror != 0, 0);
+ }
+ }
+}
+
diff --git a/Build/source/mswin32/tar-links.pl b/Build/source/mswin32/tar-links.pl
new file mode 100644
index 00000000000..e87ec0f6112
--- /dev/null
+++ b/Build/source/mswin32/tar-links.pl
@@ -0,0 +1,103 @@
+#
+# Tool to correct links in tar files.
+# Author: F. Popineau
+# Date : 22/12/97
+# Time-stamp: <02/12/23 00:33:46 popineau>
+#
+# Usage:
+# gzip -dc <file>.tar.gz | tar tvf - | perl tar-links.pl
+#
+require "newgetopt.pl";
+use Cwd;
+
+&main;
+
+exit 0;
+
+sub canon_dir
+{
+ local ($p, $rep) = @_;
+ if ($rep eq '' || $rep eq '\\') {
+ $p =~ s@/@\\@g;
+ $p =~ s@\\[\\]+@\\@g;
+ $p =~ s@\\.\\@\\@g;
+ $p =~ s@\\([^\\]+)\\..\\@\\@g;
+ }
+ elsif ($rep eq '/') {
+ $p =~ s@\\@/@g;
+ $p =~ s@/[/]+@/@g;
+ $p =~ s@/./@/@g;
+ $p =~ s@/([^/]+)/../@/@g;
+ }
+ else {
+ die ("canon_dir($p) : invalid separator $rep.\n");
+ }
+ return $p;
+}
+
+# Merges all elements in the list into a single path, adding
+# directory separators as needed.
+sub newpath
+{
+ local($p, $s);
+ # Concatenates the arguments, adding path separators as needed
+ $p = @_[0];
+ for ($i = 1; $i <= $#_; $i++) {
+ $p = $p . "\\" . $_[$i];
+ }
+ return &canon_dir($p);
+}
+
+sub dirname {
+ local ($f) = @_;
+ $f =~ m@^(.*[/\\])[^/\\]*@;
+ return $1;
+}
+
+# Copy source to dest
+sub copy
+{
+ local ($src, $dest) = @_;
+
+ print "Copying $src to $dest\n" if ($opt_verbose);
+
+ die "Copy : source file $src does not exist.\n"
+ unless (-f $src);
+# die "Copy : destination file $dest does not exist.\n"
+# unless (-f $dest || -d $dest);
+ if (-d $dest) {
+ $dest = &newpath($dest, &basename($src));
+ }
+ open IN, "<$src";
+ open OUT, ">$dest";
+ binmode(IN);
+ binmode(OUT);
+ print OUT <IN>;
+ close(IN);
+ close(OUT);
+}
+
+sub make_link {
+ local ($to, $from) = @_;
+ $to = canon_dir($to);
+ $from = newpath(dirname($to), $from);
+ print "linking $from -> $to ...";
+ if (-e $to) {
+ unlink($to);
+ }
+ if (-d $from) {
+ system("xcopy $from $to /f/r/i/e/d/k");
+ }
+ else {
+ copy($from, $to);
+ }
+ print " done\n";
+}
+
+sub main {
+ while (<>) {
+ if ($_ =~ m/([^\s]+)\s*->\s*([^\s]+)/) {
+ make_link($1, $2);
+ }
+ }
+}
diff --git a/Build/source/mswin32/tldiff.bat b/Build/source/mswin32/tldiff.bat
new file mode 100644
index 00000000000..72df1474a75
--- /dev/null
+++ b/Build/source/mswin32/tldiff.bat
@@ -0,0 +1,8 @@
+@echo off
+cd \source\fptex
+\source\gnu\diffutils-2.7\dynamic\diff.exe -ruN -X mswin32\diff.exclude -x "*/texk.development/*" . c:\source\TeXLive\Build\source\TeX > diffs\tl-source-%1.diff
+move texk texk.stable
+move texk.development texk
+\source\gnu\diffutils-2.7\dynamic\diff.exe -ruN -X mswin32\diff.exclude -x "*/texk.stable/*" . c:\source\TeXLive\Build\source.development\TeX > diffs\tl-dev-%1.diff
+move texk texk.development
+move texk.stable texk \ No newline at end of file
diff --git a/Build/source/mswin32/update.pl b/Build/source/mswin32/update.pl
new file mode 100644
index 00000000000..1099327eeea
--- /dev/null
+++ b/Build/source/mswin32/update.pl
@@ -0,0 +1,171 @@
+#
+# Purpose: maintain the set of Xemtex files
+# Author: F. Popineau
+# See the xemtex-files.txt for more information.
+#
+require "newgetopt.pl";
+
+use lib qw(c:/source/TeXLive/Master/Tools);
+use FileUtils;
+
+my $sourcedir;
+my $destdir = "c:/Program Files/TeXLive";
+my %files = ( );
+my $root;
+
+my $opt_verbose = 1;
+
+#my $pattern = "c:/source/xemtex/Master/xemacs-packages/info/cc-mode.*";
+# if (-f $pattern) { print "OK\n"; };
+&main;
+
+1;
+
+#
+# FIXME: pb with ghostscript !!!
+#
+
+sub prune_files {
+ my ($dir) = @_;
+ my $cut = ($dir =~ m/^CVS$/ || $dir =~ m/[\\\/]CVS$/ ? 1 : 0);
+ return $cut;
+}
+
+sub check_files {
+ my ($dir, @files) = @_;
+
+ $dir =~ s@\\@/@g;
+ my $node = $root;
+ map {
+ $node = $node->{$_};
+ } (split ("/", $dir));
+ if ($node) {
+ for my $f (@files) {
+ if (! $node->{$f}) {
+ my $name = "$dir/$f";
+ $name =~ s@\\@/@g;
+ next if ($name !~ m@/xemtex/@);
+ # unlink $name;
+ if (-f $name) {
+ print "Unlinking $name\n";
+ unlink($name);
+ } elsif (-d $name) {
+ print "Removing directory $name\n";
+ &FileUtils::rec_rmdir($name);
+ }
+ }
+ }
+ }
+# else {
+# print "Warning !!! You should remove directory $dir\n";
+# }
+}
+
+sub main {
+
+
+ unless (&NGetOpt ("dry", "verbose")) {
+ print STDERR "Try `$0 --help'";
+ exit 1;
+ };
+
+ my $descfile = $ARGV[0];
+ die "usage: $0 <xemtex-files.txt>\nThe list of files is required.\n" if (! $descfile);
+ die "$0: $descfile is not a file!\n" if (! -f $descfile);
+
+ open FILE, "<$descfile";
+ while (<FILE>) {
+ chomp;
+ my $line = $_;
+ $line =~ s@\\@/@g;
+ next if ($line =~ m/^\#/);
+ next if ($line =~ m/^\s*$/);
+ if ($line =~ m/^\s*(\$[^\s]*\s*=\s*\"[^\"]*\")\s*$/ixo) {
+ eval($1);
+ } elsif ($line =~ m/^\[\s*source\s*=\s*(\"[^\"]*\")\s*\]/ixo) {
+ $sourcedir = eval($1);
+ $sourcedir =~ s@\\@/@g;
+ }
+ elsif ($line =~ m@^([^\s]*)\s*=>\s*([^\s]*)$@) {
+ $files{"$sourcedir/$1"} = "$destdir/$2";
+ }
+ else {
+ $files{"$sourcedir/$line"} = "$destdir/$line";
+ }
+ }
+ close FILE;
+
+ my @xemtexfiles = ();
+
+ for my $src (keys %files) {
+ if (-f $src) {
+# print "file src = $src\n";
+ if (-d "$files{$src}") {
+ $files{$src} .= "/" . &FileUtils::basename($src);
+ }
+ my $dst = &FileUtils::dirname($files{$src});
+ if (! -d $dst) {
+ print "Creating directory $dst\n" if ($opt_verbose || $opt_dry);
+ &FileUtils::rec_mkdir($dst) unless($opt_dry);
+ }
+ if (! -f "$files{$src}") {
+ print "Copying $src to $files{$src}\n" if ($opt_verbose || $opt_dry);
+ &FileUtils::copy($src, $files{$src}) unless ($opt_dry);
+ if ($files{$src} =~ m/\.gz$/) {
+ system ("gzip -qfd $files{$src}");
+ $files{$src} =~ s/\.gz$//;
+ }
+ }
+ elsif (
+ &FileUtils::newer($src, "$files{$src}") > 0
+ ) {
+ &FileUtils::copy($src, $files{$src}) unless($opt_dry);
+ print "Copying $src to $files{$src}\n" if ($opt_verbose || $opt_dry);
+ if ($files{$src} =~ m/\.gz$/) {
+ system ("gzip -qfd $files{$src}");
+ $files{$src} =~ s/\.gz$//;
+ }
+ }
+ push @xemtexfiles, $files{$src};
+ }
+ else {
+ my $dst = $files{$src};
+ if (! -d $files{$src}) {
+ $dst = &FileUtils::dirname($files{$src});
+ }
+ if (! -d $dst) {
+ print "Creating directory $dst\n" if ($opt_verbose || $opt_dry);
+ &FileUtils::rec_mkdir($dst) unless($opt_dry);
+ }
+ my @srcfiles = &FileUtils::globexpand(1, $src);
+ $src = &FileUtils::dirname($src);
+# print "multiple src = $src srcfiles = @srcfiles\n";
+ map {
+ $_ =~ m@$src/(.*)$@;
+ my $dstfile = "$dst/$1";
+ &FileUtils::rec_mkdir(&FileUtils::dirname("$dstfile")) if (! -d &FileUtils::dirname("$dstfile"));
+ if (! -f "$dstfile") {
+ &FileUtils::copy($_, "$dstfile") unless($opt_dry);
+ print "Copying $_ to $dstfile\n" if ($opt_verbose || $opt_dry);
+ if ($dstfile =~ m/\.gz$/) {
+ system ("gzip -qfd $dstfile");
+ $dstfile =~ s/\.gz$//;
+ }
+ }
+ elsif (
+ &FileUtils::newer($_, "$dstfile") > 0
+ ) {
+ &FileUtils::copy($_, "$dstfile") unless($opt_dry);
+ print "Copying $_ to $dstfile\n" if ($opt_verbose || $opt_dry);
+ if ($dstfile =~ m/\.gz$/) {
+ system ("gzip -qfd $dstfile");
+ $dstfile =~ s/\.gz$//;
+ }
+ }
+ push @xemtexfiles, "$dstfile";
+ } @srcfiles;
+ }
+ }
+ $root = &FileUtils::build_tree(@xemtexfiles);
+ &FileUtils::walk_dir($destdir, \&check_files);
+}
diff --git a/Build/source/mswin32/xemtex-files.txt b/Build/source/mswin32/xemtex-files.txt
new file mode 100644
index 00000000000..e4bc8299e72
--- /dev/null
+++ b/Build/source/mswin32/xemtex-files.txt
@@ -0,0 +1,1135 @@
+#
+# Purpose: to maintain the list of XEmTeX files.
+# This file list is used by the update.pl perl script.
+# Variables can be used in "source" directives only.
+# Change the follwing variables to adapt to your local
+# depot.
+# Date:
+#
+# Revision history:
+# version 0.1: initial version.
+# teTeX 2.0 packages
+# TeX4ht packages
+# XEmacs 21.5
+# XEmacs packages related to Mule, Programming modes and TeX
+#
+$TeXLiveDir = "c:/Program Files/TeXLive"
+$XEmacsDir = "c:/Program Files/XEmacs"
+$GsToolsDir = "c:/Local/GsTools"
+$NetPBMDir = "c:/Local/NetPBM"
+$PerlDir = "c:/Local/Perl"
+$ImageMagick = "c:/Program Files/ImageMagick"
+
+[ source = "c:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio .NET Enterprise Architect 2003 - English" ]
+
+MSVCR71.DLL => bin/win32/MSVCR71.DLL
+
+[ source = "c:\Local\ActiveState\Perl" ]
+
+bin/perl56.dll => bin/win32/perl56.dll
+
+[source =
+[ Source = "$TeXLiveDir/bin"]
+#
+# TeX Binaries
+#
+# bin/win32/MSVCR70.DLL
+# bin/win32/bibtex8.exe
+# bin/win32/context.exe
+# bin/win32/dvipdfm.exe
+# bin/win32/dvips.exe
+# bin/win32/e2pall.exe
+# bin/win32/ebb.exe
+# bin/win32/epstopdf.exe
+# bin/win32/fmtutil.exe
+# bin/win32/gunzip.exe
+# bin/win32/gzip.exe
+# bin/win32/bzip2.exe
+# bin/win32/htlatex.exe
+# bin/win32/ispell.exe
+# bin/win32/kpsecheck.exe
+# bin/win32/kpsewhich.exe
+# bin/win32/makeindex.exe
+# bin/win32/makempx.exe
+# bin/win32/makempy.exe
+# bin/win32/metafun.exe
+# bin/win32/mktexdir.exe
+# bin/win32/mktexfmt.exe
+# bin/win32/mktexlsr.exe
+# bin/win32/mktexmf.exe
+# bin/win32/mktexnam.exe
+# bin/win32/mktexpk.exe
+# bin/win32/mktextex.exe
+# bin/win32/mktextfm.exe
+# bin/win32/mktexupd.exe
+# bin/win32/mpost.exe
+# bin/win32/mpto.exe
+# bin/win32/mptopdf.exe
+# bin/win32/pdfclose.exe
+# bin/win32/pdfdde.exe
+# bin/win32/pdfetex.exe
+# bin/win32/pdffonts.exe
+# bin/win32/pdfimages.exe
+# bin/win32/pdfinfo.exe
+# bin/win32/pdfopen.exe
+# bin/win32/pdftops.exe
+# bin/win32/pdftosrc.exe
+# bin/win32/pdftotext.exe
+# bin/win32/perl56.dll
+# bin/win32/pkfix.exe
+# bin/win32/t4ht.exe
+# bin/win32/tex4ht.exe
+# bin/win32/texdoctk.exe
+# bin/win32/texexec.exe
+# bin/win32/texfind.exe
+# bin/win32/texfont.exe
+# bin/win32/texindex.exe
+# bin/win32/texshow.exe
+# bin/win32/texutil.exe
+# bin/win32/thumbpdf.exe
+# bin/win32/tl80bz2.dll
+# bin/win32/tl80getu.dll
+# bin/win32/tl80jpeg.dll
+# bin/win32/tl80kpse.dll
+# bin/win32/tl80mf.dll
+# bin/win32/tl80mktx.dll
+# bin/win32/tl80mp.dll
+# bin/win32/tl80pdfe.dll
+# bin/win32/tl80png.dll
+# bin/win32/tl80regx.dll
+# bin/win32/tl80unzp.dll
+# bin/win32/tl80xpat.dll
+# bin/win32/tl80zlib.dll
+# bin/win32/updmap.exe
+#
+# [ Source = "$TeXLiveDir"]
+# #
+# # AMS TeX package
+# #
+# texmf/bibtex/bib/amslatex/* => texmf/bibtex/bib/amslatex/*
+# texmf/bibtex/bst/amslatex/* => texmf/bibtex/bst/amslatex/*
+# texmf/doc/amstex/* => texmf/doc/amstex/*
+# texmf/doc/fonts/amsfonts/* => texmf/doc/fonts/amsfonts/*
+# texmf/doc/latex/amscls/* => texmf/doc/latex/amscls/*
+# texmf/doc/latex/amsfonts/* => texmf/doc/latex/amsfonts/*
+# texmf/doc/latex/amsmath/* => texmf/doc/latex/amsmath/*
+# texmf/fonts/tfm/ams/cmextra/* => texmf/fonts/tfm/ams/cmextra/*
+# texmf/fonts/tfm/ams/cyrillic/* => texmf/fonts/tfm/ams/cyrillic/*
+# texmf/fonts/tfm/ams/euler/* => texmf/fonts/tfm/ams/euler/*
+# texmf/fonts/tfm/ams/symbols/* => texmf/fonts/tfm/ams/symbols/*
+# texmf/pdftex/amstex/config/* => texmf/pdftex/amstex/config/*
+# texmf/tex/amstex/base/* => texmf/tex/amstex/base/*
+# texmf/tex/amstex/config/* => texmf/tex/amstex/config/*
+# texmf/tex/latex/amscls/* => texmf/tex/latex/amscls/*
+# texmf/tex/latex/amsfonts/* => texmf/tex/latex/amsfonts/*
+# texmf/tex/latex/amsmath/* => texmf/tex/latex/amsmath/*
+# texmf/tex/plain/amsfonts/* => texmf/tex/plain/amsfonts/*
+#
+# #
+# # Bibtex support files
+# #
+# texmf/bibtex/bib/* => texmf/bibtex/bib/*
+# texmf/bibtex/bib/base/* => texmf/bibtex/bib/base/*
+# texmf/bibtex/bst/base/* => texmf/bibtex/bst/base/*
+# texmf/doc/bibtex/base/* => texmf/doc/bibtex/base/*
+#
+# #
+# # Context
+# #
+# texmf/doc/context/* => texmf/doc/context/*
+# texmf/context/* => texmf/context/*
+# texmf/fonts/tfm/hoekwater/context/* => texmf/fonts/tfm/hoekwater/context/*
+# texmf/fonts/type1/hoekwater/context/* => texmf/fonts/type1/hoekwater/context/*
+# texmf/metapost/context/* => texmf/metapost/context/*
+# texmf/pdftex/config/context/* => texmf/pdftex/config/context/*
+# texmf/tex/context/* => texmf/tex/context/*
+# texmf/tex/generic/context/* => texmf/tex/generic/context/*
+# texmf/tex/latex/context/* => texmf/tex/latex/context/*
+#
+# #
+# # Metapost
+# #
+# texmf/doc/metapost/base/* => texmf/doc/metapost/base/*
+# texmf/metapost/base/* => texmf/metapost/base/*
+# texmf/metapost/config/* => texmf/metapost/config/*
+# texmf/metapost/mfpic/* => texmf/metapost/mfpic/*
+# texmf/metapost/misc/* => texmf/metapost/misc/*
+#
+# #
+# # TeX4ht
+# #
+# texmf/tex/generic/tex4ht/* => texmf/tex/generic/tex4ht/*
+# texmf/tex4ht/* => texmf/tex4ht/*
+#
+# #
+# # Fonts
+# #
+# texmf/doc/fonts/ae/* => texmf/doc/fonts/ae/*
+# texmf/doc/fonts/belleek/* => texmf/doc/fonts/belleek/*
+# texmf/doc/fonts/bluesky/* => texmf/doc/fonts/bluesky/*
+# texmf/doc/fonts/cbgreek/* => texmf/doc/fonts/cbgreek/*
+# texmf/doc/fonts/cm/* => texmf/doc/fonts/cm/*
+# texmf/doc/fonts/cmbright/* => texmf/doc/fonts/cmbright/*
+# texmf/doc/fonts/dstroke/* => texmf/doc/fonts/dstroke/*
+# texmf/doc/fonts/ec/* => texmf/doc/fonts/ec/*
+# texmf/doc/fonts/ecc/* => texmf/doc/fonts/ecc/*
+# texmf/doc/fonts/eurosym/* => texmf/doc/fonts/eurosym/*
+# texmf/doc/fonts/fontname/* => texmf/doc/fonts/fontname/*
+# texmf/doc/fonts/hoekwater/* => texmf/doc/fonts/hoekwater/*
+# texmf/doc/fonts/lucidabr/* => texmf/doc/fonts/lucidabr/*
+# texmf/doc/fonts/marvosym/* => texmf/doc/fonts/marvosym/*
+# texmf/doc/fonts/mathpazo/* => texmf/doc/fonts/mathpazo/*
+# texmf/doc/fonts/oldgerman/* => texmf/doc/fonts/oldgerman/*
+# texmf/doc/fonts/pxfonts/* => texmf/doc/fonts/pxfonts/*
+# texmf/doc/fonts/txfonts/* => texmf/doc/fonts/txfonts/*
+# texmf/fonts/afm/adobe/avantgar/* => texmf/fonts/afm/adobe/avantgar/*
+# texmf/fonts/afm/adobe/bookman/* => texmf/fonts/afm/adobe/bookman/*
+# texmf/fonts/afm/adobe/courier/* => texmf/fonts/afm/adobe/courier/*
+# texmf/fonts/afm/adobe/helvetic/* => texmf/fonts/afm/adobe/helvetic/*
+# texmf/fonts/afm/adobe/ncntrsbk/* => texmf/fonts/afm/adobe/ncntrsbk/*
+# texmf/fonts/afm/adobe/palatino/* => texmf/fonts/afm/adobe/palatino/*
+# texmf/fonts/afm/adobe/symbol/* => texmf/fonts/afm/adobe/symbol/*
+# texmf/fonts/afm/adobe/times/* => texmf/fonts/afm/adobe/times/*
+# texmf/fonts/afm/adobe/zapfchan/* => texmf/fonts/afm/adobe/zapfchan/*
+# texmf/fonts/afm/adobe/zapfding/* => texmf/fonts/afm/adobe/zapfding/*
+# texmf/fonts/afm/bitstrea/charter/* => texmf/fonts/afm/bitstrea/charter/*
+# texmf/fonts/afm/public/antp/* => texmf/fonts/afm/public/antp/*
+# texmf/fonts/afm/public/antt/* => texmf/fonts/afm/public/antt/*
+# texmf/fonts/afm/public/marvosym/* => texmf/fonts/afm/public/marvosym/*
+# texmf/fonts/afm/public/mathpazo/* => texmf/fonts/afm/public/mathpazo/*
+# texmf/fonts/afm/public/pl/* => texmf/fonts/afm/public/pl/*
+# texmf/fonts/afm/public/qfonts/* => texmf/fonts/afm/public/qfonts/*
+# texmf/fonts/afm/public/xypic/* => texmf/fonts/afm/public/xypic/*
+# texmf/fonts/afm/urw/avantgar/* => texmf/fonts/afm/urw/avantgar/*
+# texmf/fonts/afm/urw/bookman/* => texmf/fonts/afm/urw/bookman/*
+# texmf/fonts/afm/urw/courier/* => texmf/fonts/afm/urw/courier/*
+# texmf/fonts/afm/urw/helvetic/* => texmf/fonts/afm/urw/helvetic/*
+# texmf/fonts/afm/urw/ncntrsbk/* => texmf/fonts/afm/urw/ncntrsbk/*
+# texmf/fonts/afm/urw/palatino/* => texmf/fonts/afm/urw/palatino/*
+# texmf/fonts/afm/urw/symbol/* => texmf/fonts/afm/urw/symbol/*
+# texmf/fonts/afm/urw/times/* => texmf/fonts/afm/urw/times/*
+# texmf/fonts/afm/urw/zapfchan/* => texmf/fonts/afm/urw/zapfchan/*
+# texmf/fonts/afm/urw/zapfding/* => texmf/fonts/afm/urw/zapfding/*
+# texmf/fonts/afm/yandy/lubright/* => texmf/fonts/afm/yandy/lubright/*
+# texmf/fonts/afm/yandy/lucida/* => texmf/fonts/afm/yandy/lucida/*
+# texmf/fonts/afm/yandy/lucidfax/* => texmf/fonts/afm/yandy/lucidfax/*
+# texmf/fonts/afm/yandy/lucsans/* => texmf/fonts/afm/yandy/lucsans/*
+# texmf/fonts/afm/yandy/lumath/* => texmf/fonts/afm/yandy/lumath/*
+# texmf/fonts/afm/yandy/mathplus/* => texmf/fonts/afm/yandy/mathplus/*
+# texmf/fonts/afm/yandy/mathtime/* => texmf/fonts/afm/yandy/mathtime/*
+# texmf/fonts/tfm/adobe/avantgar/* => texmf/fonts/tfm/adobe/avantgar/*
+# texmf/fonts/tfm/adobe/bookman/* => texmf/fonts/tfm/adobe/bookman/*
+# texmf/fonts/tfm/adobe/courier/* => texmf/fonts/tfm/adobe/courier/*
+# texmf/fonts/tfm/adobe/helvetic/* => texmf/fonts/tfm/adobe/helvetic/*
+# texmf/fonts/tfm/adobe/mathppl/* => texmf/fonts/tfm/adobe/mathppl/*
+# texmf/fonts/tfm/adobe/ncntrsbk/* => texmf/fonts/tfm/adobe/ncntrsbk/*
+# texmf/fonts/tfm/adobe/palatino/* => texmf/fonts/tfm/adobe/palatino/*
+# texmf/fonts/tfm/adobe/pslatex/* => texmf/fonts/tfm/adobe/pslatex/*
+# texmf/fonts/tfm/adobe/symbol/* => texmf/fonts/tfm/adobe/symbol/*
+# texmf/fonts/tfm/adobe/times/* => texmf/fonts/tfm/adobe/times/*
+# texmf/fonts/tfm/adobe/zapfchan/* => texmf/fonts/tfm/adobe/zapfchan/*
+# texmf/fonts/tfm/adobe/zapfding/* => texmf/fonts/tfm/adobe/zapfding/*
+# texmf/fonts/tfm/bh/lubright/* => texmf/fonts/tfm/bh/lubright/*
+# texmf/fonts/tfm/bh/lucida/* => texmf/fonts/tfm/bh/lucida/*
+# texmf/fonts/tfm/bh/lucidfax/* => texmf/fonts/tfm/bh/lucidfax/*
+# texmf/fonts/tfm/bh/lucsans/* => texmf/fonts/tfm/bh/lucsans/*
+# texmf/fonts/tfm/bh/lumath/* => texmf/fonts/tfm/bh/lumath/*
+# texmf/fonts/tfm/bitstrea/charter/* => texmf/fonts/tfm/bitstrea/charter/*
+# texmf/fonts/tfm/cg/albertus/* => texmf/fonts/tfm/cg/albertus/*
+# texmf/fonts/tfm/cg/atqolive/* => texmf/fonts/tfm/cg/atqolive/*
+# texmf/fonts/tfm/cg/clarendo/* => texmf/fonts/tfm/cg/clarendo/*
+# texmf/fonts/tfm/cg/coronet/* => texmf/fonts/tfm/cg/coronet/*
+# texmf/fonts/tfm/cg/courier/* => texmf/fonts/tfm/cg/courier/*
+# texmf/fonts/tfm/cg/garamond/* => texmf/fonts/tfm/cg/garamond/*
+# texmf/fonts/tfm/cg/helvetic/* => texmf/fonts/tfm/cg/helvetic/*
+# texmf/fonts/tfm/cg/lettrgth/* => texmf/fonts/tfm/cg/lettrgth/*
+# texmf/fonts/tfm/cg/marigold/* => texmf/fonts/tfm/cg/marigold/*
+# texmf/fonts/tfm/cg/optima/* => texmf/fonts/tfm/cg/optima/*
+# texmf/fonts/tfm/cg/symbol/* => texmf/fonts/tfm/cg/symbol/*
+# texmf/fonts/tfm/cg/times/* => texmf/fonts/tfm/cg/times/*
+# texmf/fonts/tfm/cg/timesnew/* => texmf/fonts/tfm/cg/timesnew/*
+# texmf/fonts/tfm/cg/univers/* => texmf/fonts/tfm/cg/univers/*
+# texmf/fonts/tfm/cg/wingding/* => texmf/fonts/tfm/cg/wingding/*
+# texmf/fonts/tfm/jknappen/ec/* => texmf/fonts/tfm/jknappen/ec/*
+# texmf/fonts/tfm/jknappen/tc/* => texmf/fonts/tfm/jknappen/tc/*
+# texmf/fonts/tfm/public/ae/* => texmf/fonts/tfm/public/ae/*
+# texmf/fonts/tfm/public/antp/* => texmf/fonts/tfm/public/antp/*
+# texmf/fonts/tfm/public/antt/* => texmf/fonts/tfm/public/antt/*
+# texmf/fonts/tfm/public/bbm/* => texmf/fonts/tfm/public/bbm/*
+# texmf/fonts/tfm/public/bbold/* => texmf/fonts/tfm/public/bbold/*
+# texmf/fonts/tfm/public/cc-pl/* => texmf/fonts/tfm/public/cc-pl/*
+# texmf/fonts/tfm/public/cm/* => texmf/fonts/tfm/public/cm/*
+# texmf/fonts/tfm/public/cmbright/* => texmf/fonts/tfm/public/cmbright/*
+# texmf/fonts/tfm/public/cmcyr/* => texmf/fonts/tfm/public/cmcyr/*
+# texmf/fonts/tfm/public/cmextra/* => texmf/fonts/tfm/public/cmextra/*
+# texmf/fonts/tfm/public/concmath/* => texmf/fonts/tfm/public/concmath/*
+# texmf/fonts/tfm/public/concrete/* => texmf/fonts/tfm/public/concrete/*
+# texmf/fonts/tfm/public/cs/* => texmf/fonts/tfm/public/cs/*
+# texmf/fonts/tfm/public/ecc/* => texmf/fonts/tfm/public/ecc/*
+# texmf/fonts/tfm/public/eurosym/* => texmf/fonts/tfm/public/eurosym/*
+# texmf/fonts/tfm/public/euxm/* => texmf/fonts/tfm/public/euxm/*
+# texmf/fonts/tfm/public/gothic/* => texmf/fonts/tfm/public/gothic/*
+# texmf/fonts/tfm/public/latex/* => texmf/fonts/tfm/public/latex/*
+# texmf/fonts/tfm/public/marvosym/* => texmf/fonts/tfm/public/marvosym/*
+# texmf/fonts/tfm/public/mflogo/* => texmf/fonts/tfm/public/mflogo/*
+# texmf/fonts/tfm/public/misc/* => texmf/fonts/tfm/public/misc/*
+# texmf/fonts/tfm/public/pandora/* => texmf/fonts/tfm/public/pandora/*
+# texmf/fonts/tfm/public/pazo/* => texmf/fonts/tfm/public/pazo/*
+# texmf/fonts/tfm/public/pl/* => texmf/fonts/tfm/public/pl/*
+# texmf/fonts/tfm/public/pxfonts/* => texmf/fonts/tfm/public/pxfonts/*
+# texmf/fonts/tfm/public/qfonts/* => texmf/fonts/tfm/public/qfonts/*
+# texmf/fonts/tfm/public/qpx/* => texmf/fonts/tfm/public/qpx/*
+# texmf/fonts/tfm/public/qtx/* => texmf/fonts/tfm/public/qtx/*
+# texmf/fonts/tfm/public/rsfs/* => texmf/fonts/tfm/public/rsfs/*
+# texmf/fonts/tfm/public/stmaryrd/* => texmf/fonts/tfm/public/stmaryrd/*
+# texmf/fonts/tfm/public/txfonts/* => texmf/fonts/tfm/public/txfonts/*
+# texmf/fonts/tfm/public/vcm/* => texmf/fonts/tfm/public/vcm/*
+# texmf/fonts/tfm/public/vnr/* => texmf/fonts/tfm/public/vnr/*
+# texmf/fonts/tfm/public/wasy/* => texmf/fonts/tfm/public/wasy/*
+# texmf/fonts/tfm/public/xypic/* => texmf/fonts/tfm/public/xypic/*
+# texmf/fonts/tfm/yandy/courier/* => texmf/fonts/tfm/yandy/courier/*
+# texmf/fonts/tfm/yandy/helvetic/* => texmf/fonts/tfm/yandy/helvetic/*
+# texmf/fonts/tfm/yandy/lubright/* => texmf/fonts/tfm/yandy/lubright/*
+# texmf/fonts/tfm/yandy/lucida/* => texmf/fonts/tfm/yandy/lucida/*
+# texmf/fonts/tfm/yandy/lucidfax/* => texmf/fonts/tfm/yandy/lucidfax/*
+# texmf/fonts/tfm/yandy/lucsans/* => texmf/fonts/tfm/yandy/lucsans/*
+# texmf/fonts/tfm/yandy/lumath/* => texmf/fonts/tfm/yandy/lumath/*
+# texmf/fonts/tfm/yandy/mathpi/* => texmf/fonts/tfm/yandy/mathpi/*
+# texmf/fonts/tfm/yandy/mathplus/* => texmf/fonts/tfm/yandy/mathplus/*
+# texmf/fonts/tfm/yandy/mathtime/* => texmf/fonts/tfm/yandy/mathtime/*
+# texmf/fonts/tfm/yandy/symbol/* => texmf/fonts/tfm/yandy/symbol/*
+# texmf/fonts/tfm/yandy/times/* => texmf/fonts/tfm/yandy/times/*
+# texmf/fonts/tfm/yandy/zapfding/* => texmf/fonts/tfm/yandy/zapfding/*
+# texmf/fonts/type1/bitstrea/charter/* => texmf/fonts/type1/bitstrea/charter/*
+# texmf/fonts/type1/bluesky/cm/* => texmf/fonts/type1/bluesky/cm/*
+# texmf/fonts/type1/bluesky/cmextra/* => texmf/fonts/type1/bluesky/cmextra/*
+# texmf/fonts/type1/bluesky/cyrillic/* => texmf/fonts/type1/bluesky/cyrillic/*
+# texmf/fonts/type1/bluesky/euler/* => texmf/fonts/type1/bluesky/euler/*
+# texmf/fonts/type1/bluesky/latex/* => texmf/fonts/type1/bluesky/latex/*
+# texmf/fonts/type1/bluesky/symbols/* => texmf/fonts/type1/bluesky/symbols/*
+# texmf/fonts/type1/hoekwater/mflogo/* => texmf/fonts/type1/hoekwater/mflogo/*
+# texmf/fonts/type1/hoekwater/rsfs/* => texmf/fonts/type1/hoekwater/rsfs/*
+# texmf/fonts/type1/hoekwater/stmaryrd/* => texmf/fonts/type1/hoekwater/stmaryrd/*
+# texmf/fonts/type1/hoekwater/wasy/* => texmf/fonts/type1/hoekwater/wasy/*
+# texmf/fonts/type1/public/antp/* => texmf/fonts/type1/public/antp/*
+# texmf/fonts/type1/public/antt/* => texmf/fonts/type1/public/antt/*
+# texmf/fonts/type1/public/belleek/* => texmf/fonts/type1/public/belleek/*
+# texmf/fonts/type1/public/cc-pl/* => texmf/fonts/type1/public/cc-pl/*
+# texmf/fonts/type1/public/cmcyr/* => texmf/fonts/type1/public/cmcyr/*
+# texmf/fonts/type1/public/cs/* => texmf/fonts/type1/public/cs/*
+# texmf/fonts/type1/public/eurosym/* => texmf/fonts/type1/public/eurosym/*
+# texmf/fonts/type1/public/marvosym/* => texmf/fonts/type1/public/marvosym/*
+# texmf/fonts/type1/public/mathpazo/* => texmf/fonts/type1/public/mathpazo/*
+# texmf/fonts/type1/public/pl/* => texmf/fonts/type1/public/pl/*
+# texmf/fonts/type1/public/pxfonts/* => texmf/fonts/type1/public/pxfonts/*
+# texmf/fonts/type1/public/qfonts/* => texmf/fonts/type1/public/qfonts/*
+# texmf/fonts/type1/public/tt2001/* => texmf/fonts/type1/public/tt2001/*
+# texmf/fonts/type1/public/txfonts/* => texmf/fonts/type1/public/txfonts/*
+# texmf/fonts/type1/public/xypic/* => texmf/fonts/type1/public/xypic/*
+# texmf/fonts/type1/urw/avantgar/* => texmf/fonts/type1/urw/avantgar/*
+# texmf/fonts/type1/urw/bookman/* => texmf/fonts/type1/urw/bookman/*
+# texmf/fonts/type1/urw/courier/* => texmf/fonts/type1/urw/courier/*
+# texmf/fonts/type1/urw/helvetic/* => texmf/fonts/type1/urw/helvetic/*
+# texmf/fonts/type1/urw/ncntrsbk/* => texmf/fonts/type1/urw/ncntrsbk/*
+# texmf/fonts/type1/urw/palatino/* => texmf/fonts/type1/urw/palatino/*
+# texmf/fonts/type1/urw/symbol/* => texmf/fonts/type1/urw/symbol/*
+# texmf/fonts/type1/urw/times/* => texmf/fonts/type1/urw/times/*
+# texmf/fonts/type1/urw/zapfchan/* => texmf/fonts/type1/urw/zapfchan/*
+# texmf/fonts/type1/urw/zapfding/* => texmf/fonts/type1/urw/zapfding/*
+# texmf/fonts/vf/adobe/avantgar/* => texmf/fonts/vf/adobe/avantgar/*
+# texmf/fonts/vf/adobe/bookman/* => texmf/fonts/vf/adobe/bookman/*
+# texmf/fonts/vf/adobe/courier/* => texmf/fonts/vf/adobe/courier/*
+# texmf/fonts/vf/adobe/helvetic/* => texmf/fonts/vf/adobe/helvetic/*
+# texmf/fonts/vf/adobe/mathppl/* => texmf/fonts/vf/adobe/mathppl/*
+# texmf/fonts/vf/adobe/ncntrsbk/* => texmf/fonts/vf/adobe/ncntrsbk/*
+# texmf/fonts/vf/adobe/palatino/* => texmf/fonts/vf/adobe/palatino/*
+# texmf/fonts/vf/adobe/pslatex/* => texmf/fonts/vf/adobe/pslatex/*
+# texmf/fonts/vf/adobe/times/* => texmf/fonts/vf/adobe/times/*
+# texmf/fonts/vf/adobe/zapfchan/* => texmf/fonts/vf/adobe/zapfchan/*
+# texmf/fonts/vf/bh/lubright/* => texmf/fonts/vf/bh/lubright/*
+# texmf/fonts/vf/bh/lucida/* => texmf/fonts/vf/bh/lucida/*
+# texmf/fonts/vf/bh/lucidfax/* => texmf/fonts/vf/bh/lucidfax/*
+# texmf/fonts/vf/bh/lucsans/* => texmf/fonts/vf/bh/lucsans/*
+# texmf/fonts/vf/bitstrea/charter/* => texmf/fonts/vf/bitstrea/charter/*
+# texmf/fonts/vf/cg/albertus/* => texmf/fonts/vf/cg/albertus/*
+# texmf/fonts/vf/cg/atqolive/* => texmf/fonts/vf/cg/atqolive/*
+# texmf/fonts/vf/cg/clarendo/* => texmf/fonts/vf/cg/clarendo/*
+# texmf/fonts/vf/cg/coronet/* => texmf/fonts/vf/cg/coronet/*
+# texmf/fonts/vf/cg/courier/* => texmf/fonts/vf/cg/courier/*
+# texmf/fonts/vf/cg/garamond/* => texmf/fonts/vf/cg/garamond/*
+# texmf/fonts/vf/cg/helvetic/* => texmf/fonts/vf/cg/helvetic/*
+# texmf/fonts/vf/cg/lettrgth/* => texmf/fonts/vf/cg/lettrgth/*
+# texmf/fonts/vf/cg/marigold/* => texmf/fonts/vf/cg/marigold/*
+# texmf/fonts/vf/cg/optima/* => texmf/fonts/vf/cg/optima/*
+# texmf/fonts/vf/cg/times/* => texmf/fonts/vf/cg/times/*
+# texmf/fonts/vf/cg/timesnew/* => texmf/fonts/vf/cg/timesnew/*
+# texmf/fonts/vf/cg/univers/* => texmf/fonts/vf/cg/univers/*
+# texmf/fonts/vf/public/ae/* => texmf/fonts/vf/public/ae/*
+# texmf/fonts/vf/public/cmcyr/* => texmf/fonts/vf/public/cmcyr/*
+# texmf/fonts/vf/public/pazo/* => texmf/fonts/vf/public/pazo/*
+# texmf/fonts/vf/public/pxfonts/* => texmf/fonts/vf/public/pxfonts/*
+# texmf/fonts/vf/public/qpx/* => texmf/fonts/vf/public/qpx/*
+# texmf/fonts/vf/public/qtx/* => texmf/fonts/vf/public/qtx/*
+# texmf/fonts/vf/public/txfonts/* => texmf/fonts/vf/public/txfonts/*
+# texmf/fonts/vf/public/vcm/* => texmf/fonts/vf/public/vcm/*
+# texmf/fonts/vf/yandy/mathplus/* => texmf/fonts/vf/yandy/mathplus/*
+# texmf/fonts/vf/yandy/mathtime/* => texmf/fonts/vf/yandy/mathtime/*
+# texmf/fonts/vf/yandy/times/* => texmf/fonts/vf/yandy/times/*
+#
+#
+# texmf/aliases => texmf/aliases
+# texmf/bibtex/bst/adrconv/* => texmf/bibtex/bst/adrconv/*
+# texmf/bibtex/bst/germbib/* => texmf/bibtex/bst/germbib/*
+# texmf/bibtex/bst/misc/* => texmf/bibtex/bst/misc/*
+# texmf/bibtex/bst/natbib/* => texmf/bibtex/bst/natbib/*
+# texmf/bibtex/bst/revtex4/* => texmf/bibtex/bst/revtex4/*
+# texmf/doc/index.html => texmf/doc/index.html
+# texmf/doc/eplain/* => texmf/doc/eplain/*
+# texmf/doc/etex/base/* => texmf/doc/etex/base/*
+# texmf/doc/fontinst/base/* => texmf/doc/fontinst/base/*
+# texmf/doc/generic/babel/* => texmf/doc/generic/babel/*
+# texmf/doc/generic/cmyk-hax/* => texmf/doc/generic/cmyk-hax/*
+# texmf/doc/generic/localloc/* => texmf/doc/generic/localloc/*
+# texmf/doc/generic/mfpic/* => texmf/doc/generic/mfpic/*
+# texmf/doc/generic/multido/* => texmf/doc/generic/multido/*
+# texmf/doc/generic/nohyph/* => texmf/doc/generic/nohyph/*
+# texmf/doc/generic/poligraf/* => texmf/doc/generic/poligraf/*
+# texmf/doc/generic/pstricks/* => texmf/doc/generic/pstricks/*
+# texmf/doc/generic/ruhyphen/* => texmf/doc/generic/ruhyphen/*
+# texmf/doc/generic/styles/* => texmf/doc/generic/styles/*
+# texmf/doc/generic/tap/* => texmf/doc/generic/tap/*
+# texmf/doc/generic/texdraw/* => texmf/doc/generic/texdraw/*
+# texmf/doc/generic/thumbpdf/* => texmf/doc/generic/thumbpdf/*
+# texmf/doc/generic/ukrhyph/* => texmf/doc/generic/ukrhyph/*
+# texmf/doc/generic/xypic/* => texmf/doc/generic/xypic/*
+# texmf/doc/help/* => texmf/doc/help/*
+# texmf/doc/help/ctan/* => texmf/doc/help/ctan/*
+# texmf/doc/help/faq/uktug-faq/* => texmf/doc/help/faq/uktug-faq/*
+# texmf/doc/images/* => texmf/doc/images/*
+# texmf/doc/knuth/* => texmf/doc/knuth/*
+# texmf/doc/knuth/errata/* => texmf/doc/knuth/errata/*
+# texmf/doc/latex/SIunits/* => texmf/doc/latex/SIunits/*
+# texmf/doc/latex/acronym/* => texmf/doc/latex/acronym/*
+# texmf/doc/latex/aeguill/* => texmf/doc/latex/aeguill/*
+# texmf/doc/latex/anysize/* => texmf/doc/latex/anysize/*
+# texmf/doc/latex/base/* => texmf/doc/latex/base/*
+# texmf/doc/latex/booktabs/* => texmf/doc/latex/booktabs/*
+# texmf/doc/latex/caption/* => texmf/doc/latex/caption/*
+# texmf/doc/latex/carlisle/* => texmf/doc/latex/carlisle/*
+# texmf/doc/latex/ccaption/* => texmf/doc/latex/ccaption/*
+# texmf/doc/latex/ccfonts/* => texmf/doc/latex/ccfonts/*
+# texmf/doc/latex/changebar/* => texmf/doc/latex/changebar/*
+# texmf/doc/latex/currvita/* => texmf/doc/latex/currvita/*
+# texmf/doc/latex/custom-bib/* => texmf/doc/latex/custom-bib/*
+# texmf/doc/latex/cyrillic/* => texmf/doc/latex/cyrillic/*
+# texmf/doc/latex/dinbrief/* => texmf/doc/latex/dinbrief/*
+# texmf/doc/latex/draftcopy/* => texmf/doc/latex/draftcopy/*
+# texmf/doc/latex/eepic/* => texmf/doc/latex/eepic/*
+# texmf/doc/latex/eso-pic/* => texmf/doc/latex/eso-pic/*
+# texmf/doc/latex/extsizes/* => texmf/doc/latex/extsizes/*
+# texmf/doc/latex/fancyhdr/* => texmf/doc/latex/fancyhdr/*
+# texmf/doc/latex/fancyvrb/* => texmf/doc/latex/fancyvrb/*
+# texmf/doc/latex/floatflt/* => texmf/doc/latex/floatflt/*
+# texmf/doc/latex/footmisc/* => texmf/doc/latex/footmisc/*
+# texmf/doc/latex/g-brief/* => texmf/doc/latex/g-brief/*
+# texmf/doc/latex/general/* => texmf/doc/latex/general/*
+# texmf/doc/latex/geometry/* => texmf/doc/latex/geometry/*
+# texmf/doc/latex/graphics/* => texmf/doc/latex/graphics/*
+# texmf/doc/latex/hyperref/* => texmf/doc/latex/hyperref/*
+# texmf/doc/latex/images/* => texmf/doc/latex/images/*
+# texmf/doc/latex/jknappen/* => texmf/doc/latex/jknappen/*
+# texmf/doc/latex/koma-script/* => texmf/doc/latex/koma-script/*
+# texmf/doc/latex/latex2e-html/* => texmf/doc/latex/latex2e-html/*
+# texmf/doc/latex/leftidx/* => texmf/doc/latex/leftidx/*
+# texmf/doc/latex/lettrine/* => texmf/doc/latex/lettrine/*
+# texmf/doc/latex/mathtime/* => texmf/doc/latex/mathtime/*
+# texmf/doc/latex/mdwtools/* => texmf/doc/latex/mdwtools/*
+# texmf/doc/latex/mfnfss/* => texmf/doc/latex/mfnfss/*
+# texmf/doc/latex/minitoc/* => texmf/doc/latex/minitoc/*
+# texmf/doc/latex/mltex/* => texmf/doc/latex/mltex/*
+# texmf/doc/latex/ms/* => texmf/doc/latex/ms/*
+# texmf/doc/latex/mwcls/* => texmf/doc/latex/mwcls/*
+# texmf/doc/latex/natbib/* => texmf/doc/latex/natbib/*
+# texmf/doc/latex/nomencl/* => texmf/doc/latex/nomencl/*
+# texmf/doc/latex/ntgclass/* => texmf/doc/latex/ntgclass/*
+# texmf/doc/latex/oberdiek/* => texmf/doc/latex/oberdiek/*
+# texmf/doc/latex/overpic/* => texmf/doc/latex/overpic/*
+# texmf/doc/latex/pb-diagram/* => texmf/doc/latex/pb-diagram/*
+# texmf/doc/latex/pdfpages/* => texmf/doc/latex/pdfpages/*
+# texmf/doc/latex/preprint/* => texmf/doc/latex/preprint/*
+# texmf/doc/latex/program/* => texmf/doc/latex/program/*
+# texmf/doc/latex/psfrag/* => texmf/doc/latex/psfrag/*
+# texmf/doc/latex/psgo/* => texmf/doc/latex/psgo/*
+# texmf/doc/latex/pslatex/* => texmf/doc/latex/pslatex/*
+# texmf/doc/latex/psnfss/* => texmf/doc/latex/psnfss/*
+# texmf/doc/latex/revtex4/* => texmf/doc/latex/revtex4/*
+# texmf/doc/latex/rotating/* => texmf/doc/latex/rotating/*
+# texmf/doc/latex/rotfloat/* => texmf/doc/latex/rotfloat/*
+# texmf/doc/latex/scale/* => texmf/doc/latex/scale/*
+# texmf/doc/latex/seminar/* => texmf/doc/latex/seminar/*
+# texmf/doc/latex/showlabels/* => texmf/doc/latex/showlabels/*
+# texmf/doc/latex/sidecap/* => texmf/doc/latex/sidecap/*
+# texmf/doc/latex/styles/* => texmf/doc/latex/styles/*
+# texmf/doc/latex/supertab/* => texmf/doc/latex/supertab/*
+# texmf/doc/latex/textmerg/* => texmf/doc/latex/textmerg/*
+# texmf/doc/latex/tocbibind/* => texmf/doc/latex/tocbibind/*
+# texmf/doc/latex/tools/* => texmf/doc/latex/tools/*
+# texmf/doc/latex/treesvr/* => texmf/doc/latex/treesvr/*
+# texmf/doc/latex/units/* => texmf/doc/latex/units/*
+# texmf/doc/latex/wasysym/* => texmf/doc/latex/wasysym/*
+# texmf/doc/latex/xtab/* => texmf/doc/latex/xtab/*
+# texmf/doc/latex/yfonts/* => texmf/doc/latex/yfonts/*
+# texmf/doc/makeindex/* => texmf/doc/makeindex/*
+# texmf/doc/pdftex/base/* => texmf/doc/pdftex/base/*
+# texmf/doc/programs/* => texmf/doc/programs/*
+# texmf/doc/tetex/* => texmf/doc/tetex/*
+# texmf/doc/texdoctk/* => texmf/doc/texdoctk/*
+# texmf/dvipdfm/* => texmf/dvipdfm/*
+# texmf/dvips/antp/* => texmf/dvips/antp/*
+# texmf/dvips/antt/* => texmf/dvips/antt/*
+# texmf/dvips/base/* => texmf/dvips/base/*
+# texmf/dvips/bluesky/* => texmf/dvips/bluesky/*
+# texmf/dvips/cc-pl/* => texmf/dvips/cc-pl/*
+# texmf/dvips/config/* => texmf/dvips/config/*
+# texmf/dvips/misc/* => texmf/dvips/misc/*
+# texmf/dvips/pl/* => texmf/dvips/pl/*
+# texmf/dvips/psfrag/* => texmf/dvips/psfrag/*
+# texmf/dvips/psnfss/* => texmf/dvips/psnfss/*
+# texmf/dvips/pstricks/* => texmf/dvips/pstricks/*
+# texmf/dvips/qfonts/* => texmf/dvips/qfonts/*
+# texmf/dvips/tetex/* => texmf/dvips/tetex/*
+# texmf/dvips/xypic/* => texmf/dvips/xypic/*
+# texmf/etex/latex/config/* => texmf/etex/latex/config/*
+# texmf/etex/latex/misc/* => texmf/etex/latex/misc/*
+# texmf/etex/plain/base/* => texmf/etex/plain/base/*
+# texmf/etex/plain/config/* => texmf/etex/plain/config/*
+# texmf/fontname/* => texmf/fontname/*
+# texmf/makeindex/* => texmf/makeindex/*
+# texmf/mft/* => texmf/mft/*
+# texmf/pdfetex/latex/config/* => texmf/pdfetex/latex/config/*
+# texmf/pdfetex/tex/config/* => texmf/pdfetex/tex/config/*
+# texmf/pdftex/config/* => texmf/pdftex/config/*
+# texmf/pdftex/latex/config/* => texmf/pdftex/latex/config/*
+# texmf/pdftex/plain/config/* => texmf/pdftex/plain/config/*
+# texmf/pdftex/plain/misc/* => texmf/pdftex/plain/misc/*
+# texmf/pdftex/platex/config/* => texmf/pdftex/platex/config/*
+# texmf/tex/eplain/* => texmf/tex/eplain/*
+# texmf/tex/fontinst/base/* => texmf/tex/fontinst/base/*
+# texmf/tex/generic/babel/* => texmf/tex/generic/babel/*
+# texmf/tex/generic/config/* => texmf/tex/generic/config/*
+# texmf/tex/generic/eijkhout/* => texmf/tex/generic/eijkhout/*
+# texmf/tex/generic/german/* => texmf/tex/generic/german/*
+# texmf/tex/generic/hyphen/* => texmf/tex/generic/hyphen/*
+# texmf/tex/generic/mfpic/* => texmf/tex/generic/mfpic/*
+# texmf/tex/generic/misc/* => texmf/tex/generic/misc/*
+# texmf/tex/generic/multido/* => texmf/tex/generic/multido/*
+# texmf/tex/generic/pictex/* => texmf/tex/generic/pictex/*
+# texmf/tex/generic/pstricks/* => texmf/tex/generic/pstricks/*
+# texmf/tex/generic/qpx/* => texmf/tex/generic/qpx/*
+# texmf/tex/generic/qtx/* => texmf/tex/generic/qtx/*
+# texmf/tex/generic/ruhyphen/* => texmf/tex/generic/ruhyphen/*
+# texmf/tex/generic/spanishb/* => texmf/tex/generic/spanishb/*
+# texmf/tex/generic/texdraw/* => texmf/tex/generic/texdraw/*
+# texmf/tex/generic/thumbpdf/* => texmf/tex/generic/thumbpdf/*
+# texmf/tex/generic/ukrhyph/* => texmf/tex/generic/ukrhyph/*
+# texmf/tex/generic/vietnam/* => texmf/tex/generic/vietnam/*
+# texmf/tex/generic/xypic/* => texmf/tex/generic/xypic/*
+# texmf/tex/latex/SIunits/* => texmf/tex/latex/SIunits/*
+# texmf/tex/latex/adrconv/* => texmf/tex/latex/adrconv/*
+# texmf/tex/latex/ae/* => texmf/tex/latex/ae/*
+# texmf/tex/latex/antp/* => texmf/tex/latex/antp/*
+# texmf/tex/latex/antt/* => texmf/tex/latex/antt/*
+# texmf/tex/latex/base/* => texmf/tex/latex/base/*
+# texmf/tex/latex/bbm/* => texmf/tex/latex/bbm/*
+# texmf/tex/latex/bbold/* => texmf/tex/latex/bbold/*
+# texmf/tex/latex/caption/* => texmf/tex/latex/caption/*
+# texmf/tex/latex/carlisle/* => texmf/tex/latex/carlisle/*
+# texmf/tex/latex/ccfonts/* => texmf/tex/latex/ccfonts/*
+# texmf/tex/latex/cite/* => texmf/tex/latex/cite/*
+# texmf/tex/latex/cmbright/* => texmf/tex/latex/cmbright/*
+# texmf/tex/latex/concmath/* => texmf/tex/latex/concmath/*
+# texmf/tex/latex/config/* => texmf/tex/latex/config/*
+# texmf/tex/latex/cslatex/* => texmf/tex/latex/cslatex/*
+# texmf/tex/latex/curves/* => texmf/tex/latex/curves/*
+# texmf/tex/latex/custom-bib/* => texmf/tex/latex/custom-bib/*
+# texmf/tex/latex/cyrillic/* => texmf/tex/latex/cyrillic/*
+# texmf/tex/latex/dinbrief/* => texmf/tex/latex/dinbrief/*
+# texmf/tex/latex/dstroke/* => texmf/tex/latex/dstroke/*
+# texmf/tex/latex/dvilj/* => texmf/tex/latex/dvilj/*
+# texmf/tex/latex/eepic/* => texmf/tex/latex/eepic/*
+# texmf/tex/latex/endfloat/* => texmf/tex/latex/endfloat/*
+# texmf/tex/latex/extsizes/* => texmf/tex/latex/extsizes/*
+# texmf/tex/latex/fancyhdr/* => texmf/tex/latex/fancyhdr/*
+# texmf/tex/latex/fancyheadings/* => texmf/tex/latex/fancyheadings/*
+# texmf/tex/latex/fancyvrb/* => texmf/tex/latex/fancyvrb/*
+# texmf/tex/latex/fp/* => texmf/tex/latex/fp/*
+# texmf/tex/latex/g-brief/* => texmf/tex/latex/g-brief/*
+# texmf/tex/latex/graphics/* => texmf/tex/latex/graphics/*
+# texmf/tex/latex/hyperref/* => texmf/tex/latex/hyperref/*
+# texmf/tex/latex/jknappen/* => texmf/tex/latex/jknappen/*
+# texmf/tex/latex/koma-script/* => texmf/tex/latex/koma-script/*
+# texmf/tex/latex/labels/* => texmf/tex/latex/labels/*
+# texmf/tex/latex/lucidabr/* => texmf/tex/latex/lucidabr/*
+# texmf/tex/latex/mathpple/* => texmf/tex/latex/mathpple/*
+# texmf/tex/latex/mathtime/* => texmf/tex/latex/mathtime/*
+# texmf/tex/latex/mdwtools/* => texmf/tex/latex/mdwtools/*
+# texmf/tex/latex/mflogo/* => texmf/tex/latex/mflogo/*
+# texmf/tex/latex/mfnfss/* => texmf/tex/latex/mfnfss/*
+# texmf/tex/latex/minitoc/* => texmf/tex/latex/minitoc/*
+# texmf/tex/latex/misc/* => texmf/tex/latex/misc/*
+# texmf/tex/latex/mltex/* => texmf/tex/latex/mltex/*
+# texmf/tex/latex/ms/* => texmf/tex/latex/ms/*
+# texmf/tex/latex/multirow/* => texmf/tex/latex/multirow/*
+# texmf/tex/latex/mwcls/* => texmf/tex/latex/mwcls/*
+# texmf/tex/latex/natbib/* => texmf/tex/latex/natbib/*
+# texmf/tex/latex/ntgclass/* => texmf/tex/latex/ntgclass/*
+# texmf/tex/latex/oberdiek/* => texmf/tex/latex/oberdiek/*
+# texmf/tex/latex/palatcm/* => texmf/tex/latex/palatcm/*
+# texmf/tex/latex/pb-diagram/* => texmf/tex/latex/pb-diagram/*
+# texmf/tex/latex/preprint/* => texmf/tex/latex/preprint/*
+# texmf/tex/latex/psnfss/* => texmf/tex/latex/psnfss/*
+# texmf/tex/latex/pstricks/* => texmf/tex/latex/pstricks/*
+# texmf/tex/latex/pxfonts/* => texmf/tex/latex/pxfonts/*
+# texmf/tex/latex/qfonts/* => texmf/tex/latex/qfonts/*
+# texmf/tex/latex/revtex4/* => texmf/tex/latex/revtex4/*
+# texmf/tex/latex/seminar/* => texmf/tex/latex/seminar/*
+# texmf/tex/latex/t2/* => texmf/tex/latex/t2/*
+# texmf/tex/latex/texmacs/* => texmf/tex/latex/texmacs/*
+# texmf/tex/latex/textmerg/* => texmf/tex/latex/textmerg/*
+# texmf/tex/latex/titlesec/* => texmf/tex/latex/titlesec/*
+# texmf/tex/latex/tools/* => texmf/tex/latex/tools/*
+# texmf/tex/latex/txfonts/* => texmf/tex/latex/txfonts/*
+# texmf/tex/latex/umlaute/* => texmf/tex/latex/umlaute/*
+# texmf/tex/latex/units/* => texmf/tex/latex/units/*
+# texmf/tex/latex/vnps/* => texmf/tex/latex/vnps/*
+# texmf/tex/latex/vnr/* => texmf/tex/latex/vnr/*
+# texmf/tex/latex/wasysym/* => texmf/tex/latex/wasysym/*
+# texmf/tex/plain/base/* => texmf/tex/plain/base/*
+# texmf/tex/plain/config/* => texmf/tex/plain/config/*
+# texmf/tex/plain/dvips/* => texmf/tex/plain/dvips/*
+# texmf/tex/plain/graphics/* => texmf/tex/plain/graphics/*
+# texmf/tex/plain/mathtime/* => texmf/tex/plain/mathtime/*
+# texmf/tex/plain/misc/* => texmf/tex/plain/misc/*
+# texmf/tex/plain/plnfss/* => texmf/tex/plain/plnfss/*
+# texmf/tex/texinfo/* => texmf/tex/texinfo/*
+# texmf/texconfig/* => texmf/texconfig/*
+# texmf/texdoctk/* => texmf/texdoctk/*
+# texmf/web2c/* => texmf/web2c/*
+# texmf/xdvi/* => texmf/xdvi/*
+#
+
+#
+# XEmacs binaries
+#
+[source = "$XEmacsDir/xemacs-21.5/i586-pc-win32"]
+## FIXME : we don't need to install from there !
+# config.values => bin/win32/config.values
+# DOC => bin/win32/DOC
+# etags.exe => bin/win32/etags.exe
+# gnuclient.exe => bin/win32/gnuclient.exe
+# gnuclientw.exe => bin/win32/gnuclientw.exe
+# gnuserv.exe => bin/win32/gnuserv.exe
+# hexl.exe => bin/win32/hexl.exe
+# i.exe => bin/win32/i.exe
+# make-docfile.exe => bin/win32/make-docfile.exe
+# make-dump-id.exe => bin/win32/make-dump-id.exe
+# minitar.exe => bin/win32/minitar.exe
+# mmencode.exe => bin/win32/mmencode.exe
+# movemail.exe => bin/win32/movemail.exe
+# MSVCR70.DLL => BIN/WIN32/MSVCR70.DLL
+# sorted-doc.exe => bin/win32/sorted-doc.exe
+# tl80cface.dll => bin/win32/tl80cface.dll
+# tl80jpeg.dll => bin/win32/tl80jpeg.dll
+# tl80png.dll => bin/win32/tl80png.dll
+# tl80tiff.dll => bin/win32/tl80tiff.dll
+# tl80xpm.dll => bin/win32/tl80xpm.dll
+# tl80zlib.dll => bin/win32/tl80zlib.dll
+# wakeup.exe => bin/win32/wakeup.exe
+# winclient.exe => bin/win32/winclient.exe
+# windoit.exe => bin/win32/windoit.exe
+# xemacs.exe => bin/win32/xemacs.exe
+
+[source = "$XEmacsDir/xemacs-21.5"]
+#
+# XEmacs base files
+#
+# etc/* => xemtex/etc/*
+# info/* => xemtex/info/*
+# lisp/* => xemtex/lisp/*
+
+[source = "$XEmacsDir"]
+#
+# XEmacs packages
+#
+
+# xemacs-packages/etc/yow-lines => xemtex/xemacs-packages/etc/yow-lines
+# xemacs-packages/etc/app-defaults/* => xemtex/xemacs-packages/etc/app-defaults/*
+# xemacs-packages/etc/e/* => xemtex/xemacs-packages/etc/e/*
+xemacs-packages/etc/start-files/* => xemtex/xemacs-packages/etc/start-files/*
+xemacs-packages/info/dir => xemtex/xemacs-packages/info/dir
+xemacs-packages/info/send-pr.info => xemtex/xemacs-packages/info/send-pr.info
+xemacs-packages/lib-src/install-sid => xemtex/xemacs-packages/lib-src/install-sid
+xemacs-packages/lib-src/pstogif => xemtex/xemacs-packages/lib-src/pstogif
+xemacs-packages/lib-src/send-pr => xemtex/xemacs-packages/lib-src/send-pr
+
+# AUC-TeX
+xemacs-packages/etc/auctex/* => xemtex/xemacs-packages/etc/auctex/*
+xemacs-packages/info/auctex.* => xemtex/xemacs-packages/info/auctex.*
+xemacs-packages/lisp/auctex/* => xemtex/xemacs-packages/lisp/auctex/*
+xemacs-packages/man/auctex/* => xemtex/xemacs-packages/man/auctex/*
+xemacs-packages/pkginfo/MANIFEST.auctex => xemtex/xemacs-packages/pkginfo/MANIFEST.auctex
+
+# Calc
+# xemacs-packages/info/calc.* => xemtex/xemacs-packages/info/calc.*
+# xemacs-packages/lisp/calc/* => xemtex/xemacs-packages/lisp/calc/*
+# xemacs-packages/man/calc/* => xemtex/xemacs-packages/man/calc/*
+# xemacs-packages/pkginfo/MANIFEST.calc => xemtex/xemacs-packages/pkginfo/MANIFEST.calc
+
+#
+# Ada support
+#
+# xemacs-packages/pkginfo/MANIFEST.ada => xemtex/xemacs-packages/pkginfo/MANIFEST.ada
+# xemacs-packages/lisp/ada/* => xemtex/xemacs-packages/lisp/ada/*
+
+#
+# Build support
+#
+xemacs-packages/pkginfo/MANIFEST.build => xemtex/xemacs-packages/pkginfo/MANIFEST.build
+xemacs-packages/man/build/* => xemtex/xemacs-packages/man/build/*
+xemacs-packages/lisp/build/* => xemtex/xemacs-packages/lisp/build/*
+xemacs-packages/info/build.info => xemtex/xemacs-packages/info/build.info
+
+#
+# C support
+#
+xemacs-packages/pkginfo/MANIFEST.c-support => xemtex/xemacs-packages/pkginfo/MANIFEST.c-support
+xemacs-packages/lisp/c-support/* => xemtex/xemacs-packages/lisp/c-support/*
+
+#
+# Calendar mode
+#
+# xemacs-packages/pkginfo/MANIFEST.calendar => xemtex/xemacs-packages/pkginfo/MANIFEST.calendar
+# xemacs-packages/lisp/calendar/* => xemtex/xemacs-packages/lisp/calendar/*
+
+#
+# CC mode
+#
+xemacs-packages/pkginfo/MANIFEST.cc-mode => xemtex/xemacs-packages/pkginfo/MANIFEST.cc-mode
+xemacs-packages/lisp/cc-mode/* => xemtex/xemacs-packages/lisp/cc-mode/*
+xemacs-packages/man/cc-mode/* => xemtex/xemacs-packages/man/cc-mode/*
+xemacs-packages/info/cc-mode.* => xemtex/xemacs-packages/info/cc-mode.*
+
+#
+# Cookie's fortune
+#
+xemacs-packages/pkginfo/MANIFEST.cookie => xemtex/xemacs-packages/pkginfo/MANIFEST.cookie
+xemacs-packages/lisp/cookie/* => xemtex/xemacs-packages/lisp/cookie/*
+
+#
+# Remote dictionnary access
+#
+# xemacs-packages/pkginfo/MANIFEST.dictionary => xemtex/xemacs-packages/pkginfo/MANIFEST.dictionary
+# xemacs-packages/lisp/dictionary/* => xemtex/xemacs-packages/lisp/dictionary/*
+
+#
+# Directory editor
+#
+xemacs-packages/pkginfo/MANIFEST.dired => xemtex/xemacs-packages/pkginfo/MANIFEST.dired
+xemacs-packages/lisp/dired/* => xemtex/xemacs-packages/lisp/dired/*
+
+#
+# Docbook SGML support
+#
+xemacs-packages/pkginfo/MANIFEST.docbookide => xemtex/xemacs-packages/pkginfo/MANIFEST.docbookide
+xemacs-packages/lisp/docbookide/* => xemtex/xemacs-packages/lisp/docbookide/*
+
+#
+# Emacs lisp debugger
+#
+xemacs-packages/pkginfo/MANIFEST.edebug => xemtex/xemacs-packages/pkginfo/MANIFEST.edebug
+xemacs-packages/lisp/edebug/* => xemtex/xemacs-packages/lisp/edebug/*
+
+#
+#
+#
+# xemacs-packages/pkginfo/MANIFEST.edict => xemtex/xemacs-packages/pkginfo/MANIFEST.edict
+# xemacs-packages/lisp/edict/* => xemtex/xemacs-packages/lisp/edict/*
+# xemacs-packages/etc/edict/* => xemtex/xemacs-packages/etc/edict/*
+
+#
+# Various editing utilities
+#
+xemacs-packages/pkginfo/MANIFEST.edit-utils => xemtex/xemacs-packages/pkginfo/MANIFEST.edit-utils
+xemacs-packages/lisp/edit-utils/* => xemtex/xemacs-packages/lisp/edit-utils/*
+
+#
+# EFS remote file access
+#
+xemacs-packages/pkginfo/MANIFEST.efs => xemtex/xemacs-packages/pkginfo/MANIFEST.efs
+xemacs-packages/lisp/efs/* => xemtex/xemacs-packages/lisp/efs/*
+xemacs-packages/man/efs/* => xemtex/xemacs-packages/man/efs/*
+xemacs-packages/info/efs.* => xemtex/xemacs-packages/info/efs.*
+
+#
+# Object Oriented System for emacs lisp
+#
+# xemacs-packages/pkginfo/MANIFEST.eieio => xemtex/xemacs-packages/pkginfo/MANIFEST.eieio
+# xemacs-packages/lisp/eieio/* => xemtex/xemacs-packages/lisp/eieio/*
+# xemacs-packages/man/eieio/* => xemtex/xemacs-packages/man/eieio/*
+
+#
+# Forms
+#
+xemacs-packages/pkginfo/MANIFEST.forms => xemtex/xemacs-packages/pkginfo/MANIFEST.forms
+xemacs-packages/lisp/forms/* => xemtex/xemacs-packages/lisp/forms/*
+xemacs-packages/man/forms/* => xemtex/xemacs-packages/man/forms/*
+xemacs-packages/info/forms.* => xemtex/xemacs-packages/info/forms.*
+
+#
+# Fortran support
+#
+# xemacs-packages/pkginfo/MANIFEST.fortran-modes => xemtex/xemacs-packages/pkginfo/MANIFEST.fortran-modes
+# xemacs-packages/lisp/fortran-modes/* => xemtex/xemacs-packages/lisp/fortran-modes/*
+
+#
+# Icons depending on buffer mode
+#
+# xemacs-packages/pkginfo/MANIFEST.frame-icon => xemtex/xemacs-packages/pkginfo/MANIFEST.frame-icon
+# xemacs-packages/lisp/frame-icon/* => xemtex/xemacs-packages/lisp/frame-icon/*
+# xemacs-packages/etc/frame-icon/* => xemtex/xemacs-packages/etc/frame-icon/*
+
+#
+# FSF Emacs compatibility
+#
+xemacs-packages/pkginfo/MANIFEST.fsf-compat => xemtex/xemacs-packages/pkginfo/MANIFEST.fsf-compat
+xemacs-packages/lisp/fsf-compat/* => xemtex/xemacs-packages/lisp/fsf-compat/*
+
+#
+# Haskell support
+#
+# xemacs-packages/pkginfo/MANIFEST.haskell-mode => xemtex/xemacs-packages/pkginfo/MANIFEST.haskell-mode
+# xemacs-packages/lisp/haskell-mode/* => xemtex/xemacs-packages/lisp/haskell-mode/*
+# xemacs-packages/etc/haskell-mode/* => xemtex/xemacs-packages/etc/haskell-mode/*
+
+#
+# HTML edition support
+#
+xemacs-packages/pkginfo/MANIFEST.hm--html-menus => xemtex/xemacs-packages/pkginfo/MANIFEST.hm--html-menus
+xemacs-packages/lisp/hm--html-menus/* => xemtex/xemacs-packages/lisp/hm--html-menus/*
+xemacs-packages/man/hm--html-menus/* => xemtex/xemacs-packages/man/hm--html-menus/*
+xemacs-packages/info/hm--html-mode.* => xemtex/xemacs-packages/info/hm--html-mode.*
+xemacs-packages/etc/hm--html-menus/* => xemtex/xemacs-packages/etc/hm--html-menus/*
+
+#
+# Buffer mode
+#
+xemacs-packages/pkginfo/MANIFEST.ibuffer => xemtex/xemacs-packages/pkginfo/MANIFEST.ibuffer
+xemacs-packages/lisp/ibuffer/* => xemtex/xemacs-packages/lisp/ibuffer/*
+
+#
+# Grep support
+#
+xemacs-packages/pkginfo/MANIFEST.igrep => xemtex/xemacs-packages/pkginfo/MANIFEST.igrep
+xemacs-packages/lisp/igrep/* => xemtex/xemacs-packages/lisp/igrep/*
+
+#
+# Lisp support
+#
+# xemacs-packages/pkginfo/MANIFEST.ilisp => xemtex/xemacs-packages/pkginfo/MANIFEST.ilisp
+# xemacs-packages/lisp/ilisp/* => xemtex/xemacs-packages/lisp/ilisp/*
+# xemacs-packages/man/ilisp/* => xemtex/xemacs-packages/man/ilisp/*
+# xemacs-packages/info/ilisp.* => xemtex/xemacs-packages/info/ilisp.*
+# xemacs-packages/etc/ilisp/* => xemtex/xemacs-packages/etc/ilisp/*
+
+#
+# ISpell support
+#
+xemacs-packages/pkginfo/MANIFEST.ispell => xemtex/xemacs-packages/pkginfo/MANIFEST.ispell
+xemacs-packages/lisp/ispell/* => xemtex/xemacs-packages/lisp/ispell/*
+xemacs-packages/man/ispell/* => xemtex/xemacs-packages/man/ispell/*
+xemacs-packages/info/ispell.* => xemtex/xemacs-packages/info/ispell.*
+
+#
+# Java development environment
+#
+xemacs-packages/pkginfo/MANIFEST.jde => xemtex/xemacs-packages/pkginfo/MANIFEST.jde
+xemacs-packages/lisp/jde/* => xemtex/xemacs-packages/lisp/jde/*
+xemacs-packages/etc/jde/* => xemtex/xemacs-packages/etc/jde/*
+
+#
+# Unify latin encoding variants
+#
+xemacs-packages/pkginfo/MANIFEST.latin-unity => xemtex/xemacs-packages/pkginfo/MANIFEST.latin-unity
+xemacs-packages/lisp/latin-unity/* => xemtex/xemacs-packages/lisp/latin-unity/*
+xemacs-packages/man/latin-unity/* => xemtex/xemacs-packages/man/latin-unity/*
+xemacs-packages/info/latin-unity.* => xemtex/xemacs-packages/info/latin-unity.*
+xemacs-packages/etc/latin-unity/* => xemtex/xemacs-packages/etc/latin-unity/*
+
+xemacs-packages/pkginfo/MANIFEST.locale => xemtex/xemacs-packages/pkginfo/MANIFEST.locale
+xemacs-packages/lisp/locale/* => xemtex/xemacs-packages/lisp/locale/*
+
+#
+#
+#
+xemacs-packages/pkginfo/MANIFEST.net-utils => xemtex/xemacs-packages/pkginfo/MANIFEST.net-utils
+xemacs-packages/lisp/net-utils/* => xemtex/xemacs-packages/lisp/net-utils/*
+
+#
+# OCaml support
+#
+# xemacs-packages/pkginfo/MANIFEST.ocaml => xemtex/xemacs-packages/pkginfo/MANIFEST.ocaml
+# xemacs-packages/lisp/ocaml/* => xemtex/xemacs-packages/lisp/ocaml/*
+
+#
+# OS support
+#
+xemacs-packages/pkginfo/MANIFEST.os-utils => xemtex/xemacs-packages/pkginfo/MANIFEST.os-utils
+xemacs-packages/lisp/os-utils/* => xemtex/xemacs-packages/lisp/os-utils/*
+
+#
+# PC support
+#
+xemacs-packages/pkginfo/MANIFEST.pc => xemtex/xemacs-packages/pkginfo/MANIFEST.pc
+xemacs-packages/lisp/pc/* => xemtex/xemacs-packages/lisp/pc/*
+
+#
+# Perl support
+#
+xemacs-packages/pkginfo/MANIFEST.perl-modes => xemtex/xemacs-packages/pkginfo/MANIFEST.perl-modes
+xemacs-packages/lisp/perl-modes/* => xemtex/xemacs-packages/lisp/perl-modes/*
+
+#
+# Emacs preview support
+#
+xemacs-packages/pkginfo/MANIFEST.preview => xemtex/xemacs-packages/pkginfo/MANIFEST.preview
+xemacs-packages/lisp/preview/* => xemtex/xemacs-packages/lisp/preview/*
+xemacs-packages/info/preview-latex.* => xemtex/xemacs-packages/info/preview-latex.*
+xemacs-packages/etc/preview/* => xemtex/xemacs-packages/etc/preview/*
+
+#
+# Various programming modes
+#
+# xemacs-packages/pkginfo/MANIFEST.prog-modes => xemtex/xemacs-packages/pkginfo/MANIFEST.prog-modes
+# xemacs-packages/lisp/prog-modes/* => xemtex/xemacs-packages/lisp/prog-modes/*
+
+#
+#
+# Print buffer
+xemacs-packages/pkginfo/MANIFEST.ps-print => xemtex/xemacs-packages/pkginfo/MANIFEST.ps-print
+xemacs-packages/lisp/ps-print-nomule/* => xemtex/xemacs-packages/lisp/ps-print-nomule/*
+
+xemacs-packages/pkginfo/MANIFEST.ps-print-nomule => xemtex/xemacs-packages/pkginfo/MANIFEST.ps-print-nomule
+xemacs-packages/lisp/ps-print/* => xemtex/xemacs-packages/lisp/ps-print/*
+xemacs-packages/etc/ps-print/* => xemtex/xemacs-packages/etc/ps-print/*
+
+#
+# SGML support
+#
+xemacs-packages/pkginfo/MANIFEST.psgml => xemtex/xemacs-packages/pkginfo/MANIFEST.psgml
+xemacs-packages/lisp/psgml/* => xemtex/xemacs-packages/lisp/psgml/*
+xemacs-packages/man/psgml/* => xemtex/xemacs-packages/man/psgml/*
+xemacs-packages/info/psgml-api.* => xemtex/xemacs-packages/info/psgml-api.*
+xemacs-packages/info/psgml.* => xemtex/xemacs-packages/info/psgml.*
+xemacs-packages/etc/psgml/* => xemtex/xemacs-packages/etc/psgml/*
+
+xemacs-packages/pkginfo/MANIFEST.psgml-dtds => xemtex/xemacs-packages/pkginfo/MANIFEST.psgml-dtds
+xemacs-packages/lisp/psgml-dtds/* => xemtex/xemacs-packages/lisp/psgml-dtds/*
+xemacs-packages/etc/psgml-dtds/* => xemtex/xemacs-packages/etc/psgml-dtds/*
+
+#
+# Python support
+#
+# xemacs-packages/pkginfo/MANIFEST.python-modes => xemtex/xemacs-packages/pkginfo/MANIFEST.python-modes
+# xemacs-packages/lisp/python-modes/* => xemtex/xemacs-packages/lisp/python-modes/*
+
+#
+# TeX references
+#
+xemacs-packages/pkginfo/MANIFEST.reftex => xemtex/xemacs-packages/pkginfo/MANIFEST.reftex
+xemacs-packages/lisp/reftex/* => xemtex/xemacs-packages/lisp/reftex/*
+xemacs-packages/man/reftex/* => xemtex/xemacs-packages/man/reftex/*
+xemacs-packages/info/reftex.* => xemtex/xemacs-packages/info/reftex.*
+xemacs-packages/etc/reftex/* => xemtex/xemacs-packages/etc/reftex/*
+
+#
+# Ruby support
+#
+xemacs-packages/pkginfo/MANIFEST.ruby-modes => xemtex/xemacs-packages/pkginfo/MANIFEST.ruby-modes
+xemacs-packages/lisp/ruby-modes/* => xemtex/xemacs-packages/lisp/ruby-modes/*
+
+#
+# Scheme support
+#
+# xemacs-packages/pkginfo/MANIFEST.scheme => xemtex/xemacs-packages/pkginfo/MANIFEST.scheme
+# xemacs-packages/lisp/scheme/* => xemtex/xemacs-packages/lisp/scheme/*
+
+#
+#
+#
+xemacs-packages/pkginfo/MANIFEST.sgml => xemtex/xemacs-packages/pkginfo/MANIFEST.sgml
+xemacs-packages/lisp/sgml/* => xemtex/xemacs-packages/lisp/sgml/*
+
+xemacs-packages/pkginfo/MANIFEST.sh-script => xemtex/xemacs-packages/pkginfo/MANIFEST.sh-script
+xemacs-packages/lisp/sh-script/* => xemtex/xemacs-packages/lisp/sh-script/*
+
+xemacs-packages/pkginfo/MANIFEST.slider => xemtex/xemacs-packages/pkginfo/MANIFEST.slider
+xemacs-packages/lisp/slider/* => xemtex/xemacs-packages/lisp/slider/*
+xemacs-packages/etc/slider/* => xemtex/xemacs-packages/etc/slider/*
+
+#
+# SML support
+#
+xemacs-packages/pkginfo/MANIFEST.sml-mode => xemtex/xemacs-packages/pkginfo/MANIFEST.sml-mode
+xemacs-packages/lisp/sml-mode/* => xemtex/xemacs-packages/lisp/sml-mode/*
+xemacs-packages/man/sml-mode/* => xemtex/xemacs-packages/man/sml-mode/*
+xemacs-packages/info/sml-mode.* => xemtex/xemacs-packages/info/sml-mode.*
+
+#
+# Sounds
+#
+xemacs-packages/pkginfo/MANIFEST.sounds-au => xemtex/xemacs-packages/pkginfo/MANIFEST.sounds-au
+xemacs-packages/lisp/sounds-au/* => xemtex/xemacs-packages/lisp/sounds-au/*
+xemacs-packages/pkginfo/MANIFEST.sounds-wav => xemtex/xemacs-packages/pkginfo/MANIFEST.sounds-wav
+xemacs-packages/lisp/sounds-wav/* => xemtex/xemacs-packages/lisp/sounds-wav/*
+xemacs-packages/etc/sounds/* => xemtex/xemacs-packages/etc/sounds/*
+
+xemacs-packages/pkginfo/MANIFEST.speedbar => xemtex/xemacs-packages/pkginfo/MANIFEST.speedbar
+xemacs-packages/lisp/speedbar/* => xemtex/xemacs-packages/lisp/speedbar/*
+xemacs-packages/man/speedbar/* => xemtex/xemacs-packages/man/speedbar/*
+xemacs-packages/info/speedbar.* => xemtex/xemacs-packages/info/speedbar.*
+
+xemacs-packages/pkginfo/MANIFEST.texinfo => xemtex/xemacs-packages/pkginfo/MANIFEST.texinfo
+xemacs-packages/lisp/texinfo/* => xemtex/xemacs-packages/lisp/texinfo/*
+
+xemacs-packages/pkginfo/MANIFEST.text-modes => xemtex/xemacs-packages/pkginfo/MANIFEST.text-modes
+xemacs-packages/lisp/text-modes/* => xemtex/xemacs-packages/lisp/text-modes/*
+
+xemacs-packages/pkginfo/MANIFEST.textools => xemtex/xemacs-packages/pkginfo/MANIFEST.textools
+xemacs-packages/lisp/textools/* => xemtex/xemacs-packages/lisp/textools/*
+
+xemacs-packages/pkginfo/MANIFEST.time => xemtex/xemacs-packages/pkginfo/MANIFEST.time
+xemacs-packages/lisp/time/* => xemtex/xemacs-packages/lisp/time/*
+xemacs-packages/etc/time/* => xemtex/xemacs-packages/etc/time/*
+
+xemacs-packages/pkginfo/MANIFEST.tramp => xemtex/xemacs-packages/pkginfo/MANIFEST.tramp
+xemacs-packages/lisp/tramp/* => xemtex/xemacs-packages/lisp/tramp/*
+xemacs-packages/man/tramp/* => xemtex/xemacs-packages/man/tramp/*
+xemacs-packages/info/tramp.* => xemtex/xemacs-packages/info/tramp.*
+
+#
+# VHDL support
+#
+# xemacs-packages/pkginfo/MANIFEST.vhdl => xemtex/xemacs-packages/pkginfo/MANIFEST.vhdl
+# xemacs-packages/lisp/vhdl/* => xemtex/xemacs-packages/lisp/vhdl/*
+# xemacs-packages/man/vhdl/* => xemtex/xemacs-packages/man/vhdl/*
+# xemacs-packages/info/vhdl-mode.* => xemtex/xemacs-packages/info/vhdl-mode.*
+
+#
+#
+#
+xemacs-packages/pkginfo/MANIFEST.view-process => xemtex/xemacs-packages/pkginfo/MANIFEST.view-process
+xemacs-packages/lisp/view-process/* => xemtex/xemacs-packages/lisp/view-process/*
+
+#
+# XEmacs base package
+#
+xemacs-packages/pkginfo/MANIFEST.xemacs-base => xemtex/xemacs-packages/pkginfo/MANIFEST.xemacs-base
+xemacs-packages/lisp/xemacs-base/* => xemtex/xemacs-packages/lisp/xemacs-base/*
+
+#
+# XEmacs development package
+#
+
+xemacs-packages/pkginfo/MANIFEST.xemacs-devel => xemtex/xemacs-packages/pkginfo/MANIFEST.xemacs-devel
+xemacs-packages/lisp/xemacs-devel/* => xemtex/xemacs-packages/lisp/xemacs-devel/*
+xemacs-packages/man/xemacs-devel/* => xemtex/xemacs-packages/man/xemacs-devel/*
+
+#
+# XSLT support
+#
+xemacs-packages/pkginfo/MANIFEST.xslide => xemtex/xemacs-packages/pkginfo/MANIFEST.xslide
+xemacs-packages/lisp/xslide/* => xemtex/xemacs-packages/lisp/xslide/*
+
+xemacs-packages/pkginfo/MANIFEST.xslt-process => xemtex/xemacs-packages/pkginfo/MANIFEST.xslt-process
+xemacs-packages/lisp/xslt-process/* => xemtex/xemacs-packages/lisp/xslt-process/*
+xemacs-packages/man/xslt-process/* => xemtex/xemacs-packages/man/xslt-process/*
+xemacs-packages/info/xslt-process.* => xemtex/xemacs-packages/info/xslt-process.*
+xemacs-packages/etc/xslt-process/* => xemtex/xemacs-packages/etc/xslt-process/*
+
+#
+# XEmTeX
+#
+xemacs-packages/pkginfo/MANIFEST.xemtex => xemtex/xemacs-packages/pkginfo/MANIFEST.xemtex
+xemacs-packages/lisp/xemtex/* => xemtex/xemacs-packages/lisp/xemtex/*
+xemacs-packages/man/xemtex/* => xemtex/xemacs-packages/man/xemtex/*
+xemacs-packages/info/xemtex.* => xemtex/xemacs-packages/info/xemtex.*
+xemacs-packages/etc/xemtex/* => xemtex/xemacs-packages/etc/xemtex/*
+
+##
+## GHOSTSCRIPT
+##
+
+[source = "$GsToolsDir/gs7.05"]
+
+bin/* => bin/win32/*
+doc/* => xemtex/doc/ghostscript/*
+examples/* => xemtex/doc/ghostscript/examples/*
+lib/* => xemtex/gslib/*
+
+[source = "$GsToolsDir"]
+
+fonts/* => xemtex/gsfonts/*
+
+##
+## NETPBM
+##
+#[source = "$NetPBMDir"]
+bin/*.dll => bin/win32
+bin/pnmcrop.exe => bin/win32
+bin/ppmtogif => bin/win32
+bin/ppmquant.exe => bin/win32
+bin/pnmflip.exe => bin/win32
+bin/pnmcat.exe => bin/win32
+bin/pnmfile.exe => bin/win32
+bin/pbmmake.exe => bin/win32
+bin/pnmtopng.exe => bin/win32
+
+#FIXME: add converters ?
+
+##
+## ImageMagick
+##
+[source = "$ImageMagick"]
+
+convert.exe => bin/win32/convert.exe
+X11.dll => bin/win32/X11.dll
+Xext.dll => bin/win32/Xext.dll
+CORE_RL_bzlib_.dll => bin/win32/CORE_RL_bzlib_.dll
+CORE_RL_fpx_.dll => bin/win32/CORE_RL_fpx_.dll
+CORE_RL_jbig_.dll => bin/win32/CORE_RL_jbig_.dll
+CORE_RL_jpeg_.dll => bin/win32/CORE_RL_jpeg_.dll
+CORE_RL_lcms_.dll => bin/win32/CORE_RL_lcms_.dll
+CORE_RL_libxml_.dll => bin/win32/CORE_RL_libxml_.dll
+CORE_RL_Magick++_.dll => bin/win32/CORE_RL_Magick++_.dll
+CORE_RL_magick_.dll => bin/win32/CORE_RL_magick_.dll
+CORE_RL_png_.dll => bin/win32/CORE_RL_png_.dll
+CORE_RL_tiff_.dll => bin/win32/CORE_RL_tiff_.dll
+CORE_RL_ttf_.dll => bin/win32/CORE_RL_ttf_.dll
+CORE_RL_xlib_.dll => bin/win32/CORE_RL_xlib_.dll
+CORE_RL_zlib_.dll => bin/win32/CORE_RL_zlib_.dll
+modules/* => xemtex/imagemagick/modules/*
+*.txt => xemtex/doc/imagemagick/*
+*.html => xemtex/doc/imagemagick/*
+licenses/* => xemtex/doc/imagemagick/licences/*
+www/* => xemtex/doc/imagemagick/www/*
+
+##
+## Perl
+##
+# [source = "$PerlDir"]
+#
+# bin/perl.exe => bin/win32/perl.exe
+# bin/tl80perl56.dll => bin/win32/tl80perl56.dll
+# lib/* => xemtex/perl/lib/*
+# site/* => xemtex/perl/site/*
+# html/* => xemtex/doc/perl/*