[OS X TeX] TeX Live Utility 1.49 fails to update old TeXLive 2019 and leaves it unusable.

Richard Koch koch at uoregon.edu
Sat Jul 10 20:49:19 EDT 2021


George,

You didn't quite understand my message. Let's try again.

At WWDC in 2020, Apple announced Big Sur. They also announced the transition to Arm.
They gave developers an initial beta of Big Sur and they allowed them to rent a
transition kit to recompile code for Arm.

When I first got the Big Sur Beta, I installed MacTeX-2020. It worked fine. If I had installed MacTeX-2019, it would also have worked fine. You moved the TeX Live 2019 tree from a machine where it worked fine to a machine running Big Sur, and it worked fine on that machine. That is NOT a surprise.

However, you are now trying to run tlmgr and you have run into a problem. You would run into
exactly the same problem if you tried to install TeX Live 2019 on the machine using the Unix
install Script from 2019. Both of these scripts expect macOS to have version numbers which
look like 10.5, 10.12, 10.13.2, etc. They do not expect a version number which starts with 11.
My current Big Sur is version 11.4.

Almost exactly a year ago, I got a note from Nelson Beebe. Let me quote it:

"I was just talking to my manager colleague about macOS 11 (aka Big
Sur) announced at the Apple WWDC last month. 

"Given that it adds support for ARM CPUs, and advances the major number
from 10 to 11 (v10 came out in 2001), I suspect that it could mean
major breakage for TeX Live."

Here's a piece of my reply:

"Big Sur indeed broke a piece of the TeX Live Infrastructure. In 2020/tlpkg/TeXLive  there is a file named 
TLUtils.pm, which among other things has a script to determine the kind of computer being run and the operating system being used. That section has code which uses a Mac command line program to get the operating system number in a form like 10.15.5. The TLUtils then separates this into major = 10 and minor = 15. Then, unfortunately, there was this line of code:

	if (major != 10), abort

I called this to Karl's attention and he fixed it. That fix has already appeared in the critical updates. Once it is made, Big Sur works fine with all of TeX."

The key point here is that this is a fix of TLUtils.pm, which is in the TeX Live Distribution. So if you were to install TeX Live 2020 on Big Sur, it would work. But TLUtils.pm is broken in TeX Live 2019. So tlmgr is also broken. And TeX Live Utility calls tlmgr.

------------

Having recalled this much information, let's see if I can resurrect Karl's fix. Maybe you can apply this fix yourself and get things to work.

The crucial file for TeX Live 2021 is

	/usr/local/texlive/2021/tlpkg/TeXLive/TLUtils.pm

The crucial code starts at line 398 of this file, and is

------------
 if ($OS eq "darwin") {
    # We have two versions of Mac binary sets.
    # 10.x and newer -> universal-darwin [MacTeX]
    # 10.6/Snow Leopard through 10.x -> x86_64-darwinlegacy, if 64-bit.
    # x changes every year. As of TL 2021 (Big Sur) Apple started with 11.x.
    #
    # (BTW, uname -r numbers are larger by 4 than the Mac minor version.
    # We don't use uname numbers here.)
    #
    # this changes each year, per above:
    my $mactex_darwin = 14;  # lowest minor rev supported by x86_64-darwin.
    #
    # Most robust approach is apparently to check sw_vers (os version,
    # returns "10.x" values), and sysctl (processor hardware).
    chomp (my $sw_vers = `sw_vers -productVersion`);
    my ($os_major,$os_minor) = split (/\./, $sw_vers);
    if ($os_major < 10) {
      warn "$0: only MacOSX is supported, not $OS $os_major.$os_minor "
           . " (from sw_vers -productVersion: $sw_vers)\n";
      return "unknownmac-unknownmac";
    }
    # have to refine after all 10.x become "legacy".
    if ($os_major >= 11 || $os_minor >= $mactex_darwin) {
      $CPU = "universal";
      $OS = "darwin";
    } elsif ($os_major == 10 && 6 <= $os_minor && $os_minor < $mactex_darwin){
      # in between, x86 hardware only.  On 10.6 only, must check if 64-bit,
      # since if later than that, always 64-bit.
      my $is64 = $os_minor == 6
                 ? `/usr/sbin/sysctl -n hw.cpu64bit_capable` >= 1
                 : 1;
      if ($is64) {
        $CPU = "x86_64";
        $OS = "darwinlegacy";
      } # if not 64-bit, default is ok (i386-darwin).
    } else {
      ; # older version, default is ok (i386-darwin, powerpc-darwin).
    }
--------------------

Turning now to a different computer running Mojave, which has TeX Live 2019 installed, I find the crucial file in the same location:

	/usr/local/texlive/2019/tlpkg/TeXLive/TLUtils.pm

This time the key code begins on line 314, and here it is:

-------------
if ($OS eq "darwin") {
   # We have two versions of Mac binary sets.
   # 10.10/Yosemite and newer (Yosemite specially left over):
   #   -> x86_64-darwin [MacTeX]
   # 10.6/Snow Leopard through 10.10/Yosemite:
   #   -> x86_64-darwinlegacy if 64-bit
   #
   # (BTW, uname -r numbers are larger by 4 than the Mac minor version.
   # We don't use uname numbers here.)
   #
   # this changes each year, per above:
   my $mactex_darwin = 12;  # lowest minor rev supported by x86_64-darwin.
   #
   # Most robust approach is apparently to check sw_vers (os version,
   # returns "10.x" values), and sysctl (processor hardware).
   chomp (my $sw_vers = `sw_vers -productVersion`);
   my ($os_major,$os_minor) = split (/\./, $sw_vers);
   if ($os_major != 10) {
     warn "$0: only MacOSX is supported, not $OS $os_major.$os_minor "
          . " (from sw_vers -productVersion: $sw_vers)\n";
     return "unknown-unknown";
   }
   if ($os_minor >= $mactex_darwin) {
     ; # current version, default is ok (x86_64-darwin).
   } elsif ($os_minor >= 6 && $os_minor < $mactex_darwin) {
     # in between, x86 hardware only.  On 10.6 only, must check if 64-bit,
     # since if later than that, always 64-bit.
     my $is64 = $os_minor == 6
                ? `/usr/sbin/sysctl -n hw.cpu64bit_capable` >= 1
                : 1;
     if ($is64) {
       $CPU = "x86_64";
       $OS = "darwinlegacy";
     } # if not 64-bit, default is ok (i386-darwin).
   } else {
     ; # older version, default is ok (i386-darwin, powerpc-darwin).
   }
---------------------

Perhaps you can revise this code and fix your problem.

Richard Koch





More information about the MacOSX-TeX mailing list