рабочие заметки: близкий аналог ATcl в Arch Linux

18 марта 2025, 01:21
Maxim Kuznetsov
0
67

Слабонервным и "виндузятникам" категорически НЕ ЧИТАТЬ. Под катом рабочие заметки про сборку tcl/tk в максимальной комплектации (почти как ATcl) в Arch Linux. 

Пользователям ATcl должно быть по крайней мере любопытно - в Windows ATcl строится примерно так-же, тоже из BAWT, но двумя компиляторами (VC+gcc) и за годы там уже всё утрясено и автоматизированно.

Тут так сказать первый заход :-)

----

Вещь хотя и узкоспециализированная, но глядишь кому и пригодится.

за оформление и обороты речи строго не судите - далее копи-паст рабочего документа, который вёлся одновременно со всеми действиями.


дистрибуция tcl/tk в Linux это что-то... Мантейнеры в сознание не приходят и вытворяют совершенно невероятные вещи.
В десктопном дистрибутиве, tcl может быть собран без поддержки pthread, или tclpthread будет отдельным опциональным пакетом (а это ещё надо смочь так сделать, у них исходники одни)
Пакет tclhttp бывает отдельно и при этом tcltls (поддержка https) может отсутсвовать в репозитарии. Сталкивался что и данных tzdata (TimeZone) тоже нет
Хотя "tcl-на-минималках", это:
 - интерпретатор, и соответсвующие .so (dll)
- базы (файлы) tzdata & encoding. Таймзоны и кодировки
- мелкие скрипты "раскрутки" интерпретатора
- обязательные пакеты:
   - http (http запросы)
   - msgcat (стандартный для C механизм локализаций)
   - thread (поддержка multi-thread)
   - tdbc (унифициорванный интерфейс SQL)
   - tdbc::sqlite - SQLite
их по отдельности даже собрать сложно, потому-что это одно единое целое. Но кто-то смог, и понеслась..

Минимум это хорошо, но хочется иметь такой-же набор возможностей как в Windows. То есть "tcl/tk-c-батарейками"


В общем :

Сборка Bawt/Tcl в EndeveurOS (Arch Linux)
======================


КВЕСТ: Собери себе Bawt
----------------------



 # для сборочной системы нужны: 7zip curl
 sudo pacman -S 7zip


  # создаём и используем отдельный каталог
  mkdir dist
  cd dist
  # скачиваем и распаковываем билд-систему
  wget https://www.tcl3d.org/bawt/download/Framework/Bawt-3.0.1.zip
  unzip ./Bawt-3.0.1
  # работаем в каталоге билд-системы
  cd Bawt-3.0.1
  # разрешаем исполняться tclkit
  chmod +x ./tclkit-Linux64-intel
 # смотрим версию компилятора
 gcc --version
 
  # ислючаем из сборки пакет mawt (видео с ffmeg)
  # по крайней мере в EndeveurOS (arch based)
  # и с gcc 4.2 - там масса ошибок и конфликтов
  # открываем файл Setup/Extended.bawt
  # и комментируем строчку с mawt (она там самая первая)
  # mcedit Setup/Tcl_Extended.bawt
 
  # делаем скрипт для компиляции
  # строим набор Extended для x86_64
  # (ключ update - при рестарте быстро продолжить с прежних достижений,
  #            complete - всё перепроверять по новой)
  #
  mcedit build.sh
  cat build.sh
    #!/bin/sh
    # директивы export только если gcc 14
    # (c 13 вроде всё было ok)
    export CFLAGS="-Wno-incompatible-pointer-types -Wno-implicit-function-declaration -Wno-deprecated-declarations -Wno-discarded-qualifiers"
    export CC=gcc --spec=$HOME/dist/build.spec
    . ./Build-Linux.sh intel 64 Setup/Tcl_Extended.bawt update all

  # и для gcc 14 нужен spec
  mcedit build.spec
    %rename cc1 old_cc1
    *cc1:
    -Wno-error=incompatible-pointer-types,implicit-function-declaration,deprecated-declarations,discarded-qualifiers %(old_cc1)
    %rename cc1plus old_cc1plus
    *cc1plus:
    -Wno-error=incompatible-pointer-types,implicit-function-declaration,deprecated-declarations,discarded-qualifiers %(old_cc1plus)
  # разрешаем этому скрипту исполняться
 chmod +x build.sh
 
 # если версия больше 12 (у меня 14.2.1)
 # в gcc добавили локализаций и поменяли форматы,
 # теперь --version и -v могут содержать ерунду зависящую от локали, дистрибутива, левой пятки сборщика
 # и скрипт не сможет определить версию gcc
 # надо слегка "патчить" Bawt.tcl
 # самое простое это
 #    в файле Bawt.tcl
 #    в процедуре GetGccCompilerVersion (в Bawt-3.0.1 это около строки 2164)
 #    перед return $version
 #    добавить if { $version == "" } { set version "14.2.1" }
 
  # запускаем скрипт, при ошибках разбираемся что к чему и правим
  ./build.sh
 
 # в arch сборка прошла нормально, а вот в debian-based
 # приходилось доставлять -dev библиотек : libasound2, Xrandr,Xcursor, mesa, GLU,GLX, python3
 # через apt search разберётесь в точных именах нужных пакетов
 
 результатом будет Tcl/Tk "с батарейками"
собранный в ../BawtBuild/Release/Linux/x64/Release/Distribution

           Setup file     : /home/max/dist/Bawt-3.0.1/Setup/Tcl_Extended.bawt
           Build directory: /home/max/dist/BawtBuild/Linux/x64/Release/Build
           Architecture   : x64
           Compilers      : gcc
           Global stages  : Finalize
           #  : Library Name         Version    Build time      Stages
           ----------------------------------------------------------------------
             1: cfitsio              4.1.0       0.00 minutes   None
             2: CMake                3.25.2      0.00 minutes   None
             3: giflib               5.2.1       Excluded       Option NoLinux
             4: JPEG                 9.e         Excluded       Option NoLinux
             5: libffi               3.4.6       0.00 minutes   None
             6: libressl             2.9.2       0.00 minutes   None
             7: libwebp              1.2.4       Excluded       Option NoLinux
             8: mupdf                1.24.8      0.00 minutes   None
             9: openjpeg             2.5.0       0.00 minutes   None
            10: pandoc               3.5         0.00 minutes   None
            11: pkgconfig            0.29.2      Excluded       Darwin only
            12: Python               3.7.7       Excluded       Windows only
            13: SDL                  2.26.2      0.00 minutes   None
            14: SWIG                 4.3.0       0.00 minutes   None
            15: Tcl                  8.6.16      0.00 minutes   None
            16: tcl9migrate          1.0         0.00 minutes   None
            17: Tcladdressbook       1.2.4       Excluded       Darwin only
            18: tclAE                2.0.7       Excluded       Darwin only
            19: Tclapplescript       2.2         Excluded       Darwin only
            20: tclargp              0.2         0.00 minutes   None
            21: tclcompiler          1.7.4       0.00 minutes   None
            22: tclcsv               2.4.3       0.00 minutes   None
            23: tclparser            1.8.1       0.00 minutes   None
            24: TclStubs             8.6.16      Excluded       Windows only
            25: tcltls               1.7.23      0.00 minutes   None
            26: tclvfs               1.4.3       0.00 minutes   None
            27: tclx                 8.4.4       0.00 minutes   None
            28: tdom                 0.9.5       0.00 minutes   None
            29: Tk                   8.6.16      0.00 minutes   None
            30: tkcon                2.7.11      0.00 minutes   None
            31: Tkhtml               3.0.2       0.00 minutes   None
            32: tklib                0.9         0.00 minutes   None
            33: tko                  0.4         0.00 minutes   None
            34: tkpath               0.4.0       0.00 minutes   None
            35: TkStubs              8.6.16      Excluded       Windows only
            36: tksvg                0.14        0.00 minutes   None
            37: Tktable              2.12        0.00 minutes   None
            38: tkwintrack           2.1.1       0.00 minutes   None
            39: treectrl             2.4.2       0.00 minutes   None
            40: trofs                0.4.9       0.00 minutes   None
            41: tserialport          1.1.1       0.00 minutes   None
            42: twapi                5.0.2       Excluded       Windows only
            43: udp                  1.0.12      0.00 minutes   None
            44: ukaz                 2.1         0.00 minutes   None
            45: vectcl               0.2.1       0.00 minutes   None
            46: wcb                  4.1.1       0.00 minutes   None
            47: windetect            2.0.1       0.00 minutes   None
            48: winhelp              1.1.1       Excluded       Windows only
            49: xz                   5.4.1       Excluded       Option NoLinux
            50: yasm                 1.3.0       Excluded       Windows only
            51: ZLib                 1.2.13      Excluded       Option NoLinux
            52: apave                4.4.10      0.00 minutes   None
            53: awthemes             10.4.0      0.00 minutes   None
            54: BWidget              1.10.1      0.00 minutes   None
            55: Canvas3d             1.2.3       0.00 minutes   None
            56: cffi                 2.0.3       0.00 minutes   None
            57: critcl               3.3         0.00 minutes   None
            58: DiffUtil             0.4.3       0.00 minutes   None
            59: expect               5.45.4.1    Excluded       Option NoGcc14
            60: Ffidl                0.9.1       0.00 minutes   None
            61: ffmpeg               4.4.4       0.00 minutes   None
            62: fitsTcl              2.5.1       0.00 minutes   None
            63: gdi                  0.9.9.15    Excluded       Windows only
            64: hdc                  0.2.0.1     Excluded       Windows only
            65: imgjp2               0.1.1       0.00 minutes   None
            66: imgtools             0.3.1       0.00 minutes   None
            67: iocp                 2.0.2       Excluded       Windows only
            68: itk                  4.2.5       0.00 minutes   None
            69: iwidgets             4.1.2       0.00 minutes   None
            70: materialicons        0.2         0.00 minutes   None
            71: memchan              2.3.1       0.00 minutes   None
            72: mentry               4.3.1       0.00 minutes   None
            73: Mpexpr               1.2.1       Excluded       Option NoGcc14
            74: mqtt                 4.0         0.00 minutes   None
            75: nacl                 1.1.1       0.00 minutes   None
            76: nsf                  2.4.0       0.00 minutes   None
            77: ooxml                1.9         0.00 minutes   None
            78: oratcl               4.6.1       0.00 minutes   None
            79: parse_args           0.5.1       0.00 minutes   None
            80: pdf4tcl              0.9.4       0.00 minutes   None
            81: pgintcl              3.5.2       0.00 minutes   None
            82: photoresize          0.2.1       0.00 minutes   None
            83: PNG                  1.6.39      Excluded       Option NoLinux
            84: poImg                2.1.0       0.00 minutes   None
            85: poLibs               3.0.0       0.00 minutes   None
            86: poMemory             1.0.0       0.00 minutes   None
            87: printer              0.9.6.16    Excluded       Windows only
            88: publisher            2.0         0.00 minutes   None
            89: puppyicons           0.1         0.00 minutes   None
            90: rbc                  0.2         0.00 minutes   None
            91: rl_json              0.11.6      0.00 minutes   None
            92: rtext                0.1         Excluded       Option NoTcl8
            93: ruff                 2.5.0       0.00 minutes   None
            94: scrollutil           2.4         0.00 minutes   None
            95: shellicon            0.1.1       Excluded       Windows only
            96: Snack                2.2.12      0.00 minutes   None
            97: tablelist            7.4.1       0.00 minutes   None
            98: tbcload              1.7.2       0.00 minutes   None
            99: tcl3dBasic           1.0.0       0.00 minutes   None
           100: tclfpdf              1.6         0.00 minutes   None
           101: Tclkit                           0.00 minutes   None
           102: tcllib               2.0         0.00 minutes   None
           103: tclMuPdf             2.4.3       0.00 minutes   None
           104: tclpy                0.4.1       0.00 minutes   None
           105: tclssg               2.3.1       0.00 minutes   None
           106: TclTkManual                      0.00 minutes   None
           107: tcluvc               0.1         0.00 minutes   None
           108: tclws                3.5.0       0.00 minutes   None
           109: thtmlview            2.0.0       0.00 minutes   None
           110: TIFF                 4.5.0       Excluded       Option NoLinux
           111: Tix                  8.4.4       0.00 minutes   None
           112: tkchat               1.482       0.00 minutes   None
           113: tkdnd                2.9.4       0.00 minutes   None
           114: tkribbon             1.2         Excluded       Windows only
           115: Trf                  2.1.4       0.00 minutes   None
           116: tzint                1.1.1       0.00 minutes   None
           117: Freetype             2.10.4      Excluded       Option NoLinux
           118: gorilla              1.6.1       0.00 minutes   None
           119: Img                  2.0.1       0.00 minutes   None
           120: libgd                2.3.2       0.00 minutes   None
           121: MuPDFWidget          2.3.2       0.00 minutes   Clean Extract Configure Compile Distribute
           122: OglInfo              1.0.0       0.03 minutes   Clean Extract Configure Compile Distribute
           123: pawt                 1.1.4       0.00 minutes   Clean Extract Configure Compile Distribute
           124: tclgd                1.4.1       0.06 minutes   Clean Extract Configure Compile Distribute
           125: tksqlite             0.5.14      0.02 minutes   Clean Extract Configure Compile Distribute
           126: BawtLogViewer        3.0.1       0.02 minutes   Clean Extract Configure Compile Distribute
           127: cawt                 3.0.0       Excluded       Windows only
           128: cawtapp              3.0.0       Excluded       Windows only
           129: poApps               3.0.0       0.05 minutes   Clean Extract Configure Compile Distribute
           130: poClipboardViewer    3.0.0       Excluded       Windows only
           ----------------------------------------------------------------------

В принципе, "батарейки" на все случаи жизни :-)
Плохо только что :
- без expect (он сам по себе старый как говно мамонта и под новые компиляторы надо вдумчиво патчить его исходники,;без него неприятно но можно обойтись)
- без Mpexpr - а вот это хреновато, multiprecision нужен...там всего-то один спорный момент в сорце, но очень непонятный - поэтому эту часть квеста на потом

теперь можно каталог BawtBuild/Linux/x64/Release/Install/opt/Tcl копировать в $HOME/opt/Tcl (или сразу в /opt/Tcl),
и добавить $HOME/opt/Tcl/bin в $PATH

"Мелкие" огрихи:

- в отличии от ATcl в целевом каталоге нет манов, документации и демок. Можно "руками" перетащить из сборочных каталогов или наскриптовать весь процесс.
- по хорошему надо дополнять прочими полезными пакетами, навскидку - крайне полезен Blend2d (быстрая 2d графика) и tcldbus (в Linux d-bus это нужно)
- Bawt изначально родом из Windows, и Linux,MacOS для него побочные цели, поэтому права файлов будут вразнобой. По крайней мере стоит убирать +x там где он ненужен и проверить чтобы +rx есть у всех каталогов
- многие скрипты в формате виндовс, то есть строки разделены \r\n их надо преобразовывать dos2unix (иначе запуск с шебангом #! не будет работать)