summaryrefslogtreecommitdiff
path: root/Build/source/mswin32/configure.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/mswin32/configure.pl')
-rw-r--r--Build/source/mswin32/configure.pl767
1 files changed, 767 insertions, 0 deletions
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";
+
+}