Слабонервным и "виндузятникам" категорически НЕ ЧИТАТЬ. Под катом рабочие заметки про сборку 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 (иначе запуск с шебангом #! не будет работать)


