From f201f6cfe15e09e8d152c6b4d8f7c7cb1bb0f7c7 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 10 Dec 2019 06:17:16 +0000 Subject: work on win64 support git-svn-id: svn://tug.org/texlive/trunk@53075 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/TeXLive/TLConfig.pm | 5 ++-- Master/tlpkg/TeXLive/TLPDB.pm | 6 +++++ Master/tlpkg/TeXLive/TLPSRC.pm | 9 +++++--- Master/tlpkg/TeXLive/TLUtils.pm | 50 ++++++++++++++++++++++++++++++++++++---- Master/tlpkg/TeXLive/TLWinGoo.pm | 1 + 5 files changed, 62 insertions(+), 9 deletions(-) (limited to 'Master/tlpkg/TeXLive') diff --git a/Master/tlpkg/TeXLive/TLConfig.pm b/Master/tlpkg/TeXLive/TLConfig.pm index 8b7f76122b4..09472f8bd78 100644 --- a/Master/tlpkg/TeXLive/TLConfig.pm +++ b/Master/tlpkg/TeXLive/TLConfig.pm @@ -110,7 +110,8 @@ our @CriticalPackagesList = qw/texlive.infra/; our $CriticalPackagesRegexp = '^(texlive\.infra)'; if ($^O =~ /^MSWin/i) { push (@CriticalPackagesList, "tlperl.win32"); - $CriticalPackagesRegexp = '^(texlive\.infra|tlperl\.win32$)'; + push (@CriticalPackagesList, "tlperl.win64"); + $CriticalPackagesRegexp = '^(texlive\.infra|tlperl\.win(32|64)$)'; } # @@ -345,7 +346,7 @@ C. =item C<@TeXLive::TLConfig::CriticalPackagesRegexp> A list of all those packages which we do not update regularly since they -are too central, currently texlive.infra and (for Windows) tlperl.win32. +are too central, currently texlive.infra and (for Windows) tlperl.win(32|64). =item C<$TeXLive::TLConfig::RelocTree> diff --git a/Master/tlpkg/TeXLive/TLPDB.pm b/Master/tlpkg/TeXLive/TLPDB.pm index 5ff686d5a78..30a6138b33e 100644 --- a/Master/tlpkg/TeXLive/TLPDB.pm +++ b/Master/tlpkg/TeXLive/TLPDB.pm @@ -918,6 +918,12 @@ sub expand_dependencies { if (grep(/^win32$/,@archs)) { $install{$p_dep} = 0; } + } elsif ($p_dep =~ m/^(.*)\.win64$/) { + # a win32 package should *only* be installed if we are installing + # the win64 arch + if (grep(/^win64$/,@archs)) { + $install{$p_dep} = 0; + } } else { $install{$p_dep} = 0 unless $only_arch; } diff --git a/Master/tlpkg/TeXLive/TLPSRC.pm b/Master/tlpkg/TeXLive/TLPSRC.pm index 985abbb73ef..cdef5c3c41a 100644 --- a/Master/tlpkg/TeXLive/TLPSRC.pm +++ b/Master/tlpkg/TeXLive/TLPSRC.pm @@ -129,7 +129,7 @@ sub from_file { # - normal texlive specific packages: ^texlive.*\..*$ # - configuration texlive specific packages: ^00texlive.*\..*$ if ($line =~ /^name\s/) { - $line =~ /^name\s+([-\w]+(\.win32)?|(00)?texlive\..*)$/; + $line =~ /^name\s+([-\w]+(\.win(32|64))?|(00)?texlive\..*)$/; $foundnametag && die "$srcfile:$lineno: second name directive not allowed: $line" . "(have $name)\n"; @@ -423,13 +423,16 @@ sub make_tlpobj { if ($finalp =~ m! bin/win32/!) { @todoarchs = qw/win32/; } + if ($finalp =~ m! bin/win64/!) { + @todoarchs = qw/win64/; + } # now @todoarchs contains only those archs for which we want # to match the pattern foreach my $arch (@todoarchs) { # get only those files matching the pattern my @archfiles = $tltree->get_matching_files('bin',$finalp, $pkgname, $arch); if (!@archfiles) { - if (($arch ne "win32") || defined($::tlpsrc_pattern_warn_win)) { + if ((($arch ne "win32") && ($arch ne "win64")) || defined($::tlpsrc_pattern_warn_win)) { tlwarn("$self->{name} ($arch): no hit on binpattern $finalp\n"); } } @@ -466,7 +469,7 @@ sub make_tlpobj { # get only those files matching the pattern my @archfiles = $tltree->get_matching_files('bin', $finalp, $pkgname, $arch); if (!@archfiles) { - if (($arch ne "win32") || defined($::tlpsrc_pattern_warn_win)) { + if ((($arch ne "win32") && ($arch ne "win64")) || defined($::tlpsrc_pattern_warn_win)) { tlwarn("$self->{name} ($arch): no hit on negative binpattern $finalp\n") unless $::tlpsrc_pattern_no_warn_negative; # see comments in libexec/place script. diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm index f2a5b1ce093..f1ed9cca1f0 100644 --- a/Master/tlpkg/TeXLive/TLUtils.pm +++ b/Master/tlpkg/TeXLive/TLUtils.pm @@ -25,6 +25,8 @@ C - utilities used in TeX Live infrastructure TeXLive::TLUtils::platform(); TeXLive::TLUtils::platform_name($canonical_host); TeXLive::TLUtils::platform_desc($platform); + TeXLive::TLUtils::win32_32(); + TeXLive::TLUtils::win32_64(); TeXLive::TLUtils::win32(); TeXLive::TLUtils::unix(); @@ -217,7 +219,7 @@ BEGIN { ); @EXPORT = qw(setup_programs download_file process_logging_options tldie tlwarn info log debug ddebug dddebug debug_hash - win32 xchdir xsystem run_cmd system_pipe sort_archs); + win32 win32_32 win32_64 xchdir xsystem run_cmd system_pipe sort_archs); } use Cwd; @@ -251,6 +253,7 @@ sub platform { unless (defined $::_platform_) { if ($^O =~ /^MSWin/i) { $::_platform_ = "win32"; + # TODO make sure we check how to detect win64!!! } else { my $config_guess = "$::installerdir/tlpkg/installer/config.guess"; @@ -409,7 +412,8 @@ sub platform_desc { 'sparc-linux' => 'GNU/Linux on Sparc', 'sparc-solaris' => 'Solaris on Sparc', 'universal-darwin' => 'MacOSX universal binaries', - 'win32' => 'Windows', + 'win32' => 'Windows 32bit', + 'win64' => 'Windows 64bit', 'x86_64-cygwin' => 'Cygwin on x86_64', 'x86_64-darwin' => 'MacOSX current (10.12-) on x86_64', 'x86_64-darwinlegacy' => 'MacOSX legacy (10.6-) on x86_64', @@ -431,9 +435,44 @@ sub platform_desc { } +=item C + +Return C<1> if platform is Windows32 and C<0> otherwise. The test is +currently based on the value of Perl's C<$^O> variable. + +=cut + +sub win32_32 { + if ($^O =~ /^MSWin/i) { + # TODO check 32bit + return 1; + } else { + return 0; + } + # the following needs config.guess, which is quite bad ... + # return (&platform eq "win32")? 1:0; +} +=item C + +Return C<1> if platform is Windows64 and C<0> otherwise. The test is +currently based on the value of Perl's C<$^O> variable. + +=cut + +sub win32_64 { + if ($^O =~ /^MSWin/i) { + # TODO check 64bit + return 1; + } else { + return 0; + } + # the following needs config.guess, which is quite bad ... + # return (&platform eq "win32")? 1:0; +} + =item C -Return C<1> if platform is Windows and C<0> otherwise. The test is +Return C<1> if platform is Windows32 or 64 and C<0> otherwise. The test is currently based on the value of Perl's C<$^O> variable. =cut @@ -449,6 +488,9 @@ sub win32 { } + + + =item C Return C<1> if platform is UNIX and C<0> otherwise. @@ -456,7 +498,7 @@ Return C<1> if platform is UNIX and C<0> otherwise. =cut sub unix { - return (&platform eq "win32")? 0:1; + return (&platform eq "win32" || &platform eq "win64" )? 0:1; } diff --git a/Master/tlpkg/TeXLive/TLWinGoo.pm b/Master/tlpkg/TeXLive/TLWinGoo.pm index 232a4099e1a..7daf81090b4 100644 --- a/Master/tlpkg/TeXLive/TLWinGoo.pm +++ b/Master/tlpkg/TeXLive/TLWinGoo.pm @@ -1197,6 +1197,7 @@ sub create_uninstaller { my $td = $td_fw; $td =~ s!/!\\!g; + # TODO win64 support!!! my $tdmain = `"$td\\bin\\win32\\kpsewhich" -var-value=TEXMFMAIN`; $tdmain =~ s!/!\\!g; chomp $tdmain; -- cgit v1.2.3