19,015 bytes added
, 27 January
{{header_en|title=Installing TDE 14.1.5 on Slackware / SlackwareArm Linux 15.0 | keyword={{Template:keyword_en_tde}} | description=Building, installing and configuring working TDE 14.1.5 packages on Slackware / SlackwareArm Linux 15.0 | link_page=trinity_desktop_environment_14.1.5}}
== '''TDE 14.1.5 and Slackware 15.0''' ==
At the beginning of November 2025 a new update of the '''Trinity Desktop Environment''' stable branch was released: version 14.1.5. TDE is a desktop environment for '''Linux''' and many other '''UNIX-like''' operating systems, born from the ashes of KDE 3 and nowadays developed as a standalone project. The new release is meant to close all bugs reported in the previous six months as well as to add some minor enhancements to the software. Due to a heavier than usual load of work I could not spare time enough to build TDE 14.1.5 then, but when things went back to normal I was finally able to accept the challenge.
As usual the TDE development team managed to move forward some background work and a general code clean-up. One among the major updates consists of '''renaming the TQt3 package into TQt'''. The name change could seem trivial, but '''the TQt libraries are the backbone of the whole graphical user interface''' and repercussions affected every other package of the lot, even mildly tied ones as programming language bindings for:
* '''Perl''' through the '''libTQt-Perl''' library;
* '''Python''' through the '''PyTQt''' library.
whose update presented a though challenge, insurmountable in the case of Perl. For a full list of changes, please consult the [https://wiki.trinitydesktop.org/Release_Notes_For_R14.1.5 release notes]. A brief build guide is available below.
=== PyTQt ===
The '''PyTQt''' package includes libraries required to write in Python programming language TDE integrated programs and applications. The libraries have been a part of the project since the very beginning, formerly named Python-TQt, were later renamed with release 14.1.0. Renaming TQt3 into TQt caused the consequent update of many file names and, even worse, of many library functions names and environment variables spread within the libraries, which have been ported to the new naming convention. Header files were impacted too with resulting build issues in some packages, PyTQt included.
Building the vanilla source code from the archive results in a failure and an error message lamenting a missing TQt version number:
<font color="red">Error: The TQt version number could not be determined by parsing /opt/trinity/include/tqglobal.h.</font>
Quite peculiar considering that such libraries are built and installed before the bindings are and that pretty much no other package lamented the same issue. Given TQt ubiquity one would expect every and each package of the desktop environment to be affected. I'm not a Python programmer nor I am really a Python fan and its lack would have not affected me significantly, but my stated goal has always been to provide working packages for the whole base environment thus I tried to diagnose the issue in search for a solution.
After some debugging I concluded that the issue probably resides into file ''configure.py'', whose goal is to assign sane values to building parameters for the package. The affected code starts at line 1090:
<syntaxhighlight lang="python">
...
# Check the TQt header files have been installed.
tqglobal = os.path.join(tqt_incdir, "tqglobal.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
if not os.access(tqglobal, os.F_OK):
sip_tqt_config.error("tqglobal.h or ntqglobal.h could not be found in %s." % tqt_incdir)
...
</syntaxhighlight>
Header file ''tqglobal.h'' contains but a few lines of actual code:
<syntaxhighlight lang="c">
#ifndef TQT_TQGLOBAL_H
#define TQT_TQGLOBAL_H
#include <tqt.h>
#include <ntqglobal.h>
#endif /* TQT_TQGLOBAL_H */
</syntaxhighlight>
The include clauses are a clue that any assignment probably occurs inside file ''ntqglobal.h'' and that ''tqglobal.h'' is there just for compatibility reasons. That presents no problem for C or C++ preprocessors, which import the desired lines of code from the listed files, but '''is a challenge for the Python language that is not able to understand nor execute C syntax'''. A trivial solution consists of reading the ''ntqglobal.h'' header file directly avoiding ''tqglobal.h'' redirection altogether. I tested this intuition writing the following patch:
<syntaxhighlight lang="python">
*** configure.py 2025-11-26 19:31:50.000000000 +0100
--- configure.py 2025-11-26 19:30:14.000000000 +0100
***************
*** 1091,1097 ****
macros["LIBDIR_TQT"] = tqt_libdir
# Check the TQt header files have been installed.
! tqglobal = os.path.join(tqt_incdir, "tqglobal.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
--- 1091,1097 ----
macros["LIBDIR_TQT"] = tqt_libdir
# Check the TQt header files have been installed.
! tqglobal = os.path.join(tqt_incdir, "ntqgloba.h")
if not os.access(tqglobal, os.F_OK):
tqglobal = os.path.join(tqt_incdir, "ntqglobal.h")
***************
*** 1112,1118 ****
else:
tqconfigdir = tqt_incdir
! tqconfig = os.path.join(tqconfigdir, "tqconfig.h")
if not os.access(tqconfig,os.F_OK):
tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
--- 1112,1118 ----
else:
tqconfigdir = tqt_incdir
! tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
if not os.access(tqconfig,os.F_OK):
tqconfig = os.path.join(tqconfigdir, "ntqconfig.h")
</syntaxhighlight>
then updating the ''SlackBuild'' script adding some lines to apply the tentative patch to the source code:
<syntaxhighlight lang="bash">
# Patch the configure.py script for the right configuration.
patch -p0 -i ${SRCDIR}/configure.patch
</syntaxhighlight>
That was enough to solve any build issues and '''obtain a working PyTQt package'''. Both patch and updated ''SlackBuild'' script are now included in the build tree archive. They aren't a perfect solution but mainly a hack. I'll try to contact the TDE developers to discuss the matter and will update the build tree if and when they'll provide a better solution.
----
=== LibTQt-Perl ===
'''LibTQt-Perl''', the library containing bindings for the [https://www.perl.org/ '''Perl 5'''] programming language, presents a similar issue to '''PyTQt''' for the release included in TDE 14.1.5. Again I researched the issue trying to solve it, sadly to no avail as Perl skills are required and I'm no Perl programmer. Let's discuss the issue step by step: when building a package from vanilla source code taken from archive '''libtqt-perl-trinity-14.1.5.tar.xz''' the following error is printed to screen:
config.status: creating smoke/tqt/generate.pl
readline() on closed filehandle DEFS at generate.pl line 77.
<font color="red">Can't locate Ast.pm in @INC (you may need to install the Ast module) (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5/usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5) at kalyptus line 17.</font>
BEGIN failed--compilation aborted at kalyptus line 17.
config.status: error: cannot find input file: `smoke/Makefile.in'
Essentially '''the Perl interpreter cannot find a required module thus it cannot assign proper values to the configuration parameters''' and exits with the message printed above. Searching through the source code, I found the required module in another directory of the source tree:
'''ls''' ''-lah'' kalyptus/
total 984K
drwxr-xr-x 2 root root 4.0K Apr 3 2025 .
drwxr-xr-x 10 root root 4.0K Jan 12 14:12 ..
<font color="red">-rw-r--r-- 1 root root 2.2K Apr 3 2025 Ast.pm</font>
-rw-r--r-- 1 root root 17K Apr 3 2025 ChangeLog
-rw-r--r-- 1 root root 12K Apr 3 2025 Iter.pm
-rw-r--r-- 1 root root 51 Apr 3 2025 Makefile.cvs
...
I added the required path to the list included in array '''@INC''' updating the ''SlackBuild'' script accordingly and adding a declaration for variable '''PERL5LIB''':
<syntaxhighlight lang="bash">
export DEBUG_AUTOTOOL_OPT="--disable-debug"
# Upgrade @INC path list to include the Ast.pm module for each submodule
export PERL5LIB=${TMP}/tmp-${PRGNAM}/${PRGNAM}-${SRCVER}/kalyptus
# Enter sources directory.
cd ${TMP}/tmp-${PRGNAM}/${DIR_SRC}
</syntaxhighlight>
After the update, the configuration script can pass the problematic lines of code just to get stuck again after a short while returning the following error message:
config.status: creating smoke/tqt/generate.pl
readline() on closed filehandle DEFS at generate.pl line 77.
<font color="red">Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/kalyptus/kdocAstUtil.pm line 680.</font>
Compilation failed in require at kalyptus line 20.
BEGIN failed--compilation aborted at kalyptus line 20.
config.status: error: cannot find input file: `smoke/Makefile.in'
This new issue seems tied to the '''kdocAstUtil.pm''' Perl module lines of code 679 and 680 and particularly to the '''define''' clause present: a clause the error message suggests removing. I wrote a patch to do just that:
<syntaxhighlight lang="perl">
*** ./kalyptus/kdocAstUtil.pm 2026-01-12 16:59:17.000000000 +0100
--- ./kalyptus/kdocAstUtil.pm 2026-01-12 16:44:14.000000000 +0100
***************
*** 676,682 ****
dumpAst( $kid );
}
! print "\t" x $depth, "Documentation nodes:\n" if defined
@{ $node->{Doc}->{ "Text" }};
foreach $kid ( @{ $node->{Doc}->{ "Text" }} ) {
--- 676,682 ----
dumpAst( $kid );
}
! print "\t" x $depth, "Documentation nodes:\n" if
@{ $node->{Doc}->{ "Text" }};
foreach $kid ( @{ $node->{Doc}->{ "Text" }} ) {
</syntaxhighlight>
Applying the patch gets the script '''to successfully conclude the configuration phase''' and go on to the next build stage, then fail almost immediately lamenting issues with the '''smoke''' library used to produce TQt bindings to interpreted programming languages such as Perl:
<syntaxhighlight lang="bash">
make all-recursive
make[1]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5'
Making all in smoke
make[2]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/smoke'
Making all in tqt
make[3]: Entering directory '/tmp/build/tmp-libtqt-perl/libtqt-perl-trinity-14.1.5/smoke/tqt'
/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I./.. -I/opt/trinity/include -I. -include tqt.h -DTQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -Wall -W -Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i486 -mtune=i686 -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -I/usr/include/tqt -MT smokedata.lo -MD -MP -MF .deps/smokedata.Tpo -c -o smokedata.lo smokedata.cpp
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I./.. -I/opt/trinity/include -I. -include tqt.h -DTQT_THREAD_SUPPORT -D_REENTRANT -Wno-long-long -Wundef -Wall -W -Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i486 -mtune=i686 -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -I/usr/include/tqt -MT smokedata.lo -MD -MP -MF .deps/smokedata.Tpo -c smokedata.cpp -fPIC -DPIC -o .libs/smokedata.o
smokedata.cpp:18410:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18410 | {1, 1747, 6253, 2, Smoke::mf_ctor, 9, 7}, //7 TQAccel::TQAccel(TQWidget*, const char*)
| ^~~~~~~
smokedata.cpp:18411:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18411 | {1, 1747, 6129, 1, Smoke::mf_ctor, 9, 8}, //8 TQAccel::TQAccel(TQWidget*)
| ^~~~~~~
smokedata.cpp:18412:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18412 | {1, 1747, 6348, 3, Smoke::mf_ctor, 9, 9}, //9 TQAccel::TQAccel(TQWidget*, TQObject*, const char*)
| ^~~~~~~
smokedata.cpp:18413:35: error: ‘mf_ctor’ is not a member of ‘Smoke’
18413 | {1, 1747, 6345, 2, Smoke::mf_ctor, 9, 10}, //10 TQAccel::TQAccel(TQWidget*, TQObject*)
|
</syntaxhighlight>
That's where I stopped as I could not foresee an easy solution for the issue. Both patch and updated build script will be included in the build tree archive for anyone with better skills to try and build a working package for the library. Meanwhile '''I'll strongly discourage anyone frequently using Perl to write TDE applications from updating to TDE 14.1.5'''.
----
Brief instructions to install TDE 14.1.5 from the source code are provided below. For the detailed description, please refer to the many TDE related pages in this very web site.
=== Building Packages ===
In order to build TDE successfully, please '''remove any installed TDE packages from your Linux box''', logout then login again in order to reset the environment variables, removing unwanted TDE options. Before you start you are strongly suggested to:
* Back-up all of your data, the configuration directory ''˜/.trinity'' and the configuration file ''''˜/.tderc'' in your home directory. I never experienced any data loss or other issue updating, but you definitely want to have a fail-safe in case any of that should happen.
* Removing TDE packages means no graphical interface will be available until the new release will be ready. The required time interval depends on your machine. You are suggested to switch to runlevel 3 (Command Line Interface) for the duration of the procedure:
<syntaxhighlight lang="bash">
init 3
</syntaxhighlight>
* Remove all previously installed TDE packages. To remove release 14.1.4, for example, execute command:
<syntaxhighlight lang="bash">
removepkg /var/log/packages/*trinity-14.1.4*
</syntaxhighlight>
* Delete configuration scripts left over by the '''removepkg''' command.
<syntaxhighlight lang="bash">
rm /etc/profile.d/tqt3.*
rm /etc/profile.d/trinity.*
</syntaxhighlight>
* Logout, then login again as user '''root''' to ensure that all references pointing to TDE are removed from the environment configuration.
* Install or update some packages required by TDE. Optional packages include:
* '''Heimdall''';
* '''Imlib''';
* '''Linxslt''' if you use the XML debug functionality;
* Compilers and other tools used too build software;
* Programming languages to bind to TDE (Optional);
If you don't install the prerequisites, some functionality could go missing for the resulting packages.
=== Ready the Build Tree ===
The Trinity Desktop Environment includes about 50 packages which require building and installing in the right order. Download the source code, available as a big tar archive, decompress it and move the resulting compressed files in the proper directory.
* Download and decompress [http://www.giustetti.net/resource/slackbuild/tde/1415/tde_build_tree_sg-14.1.5.tar.xz the build tree archive] in a local directory. Both ''/tmp'' and ''/usr/src/tde-14.1.5'' are valid candidates.
* Download and decompress the '''tar''' archive containing the [https://mirror.ppa.trinitydesktop.org/trinity/releases/R14.1.5/R14.1.5-complete.tar source code for '''all''' of the packages].
* Move the compressed source code archives in the target directories. Every archive with '''tar.xz''' extension to the directory bearing the same name.
* Set the build options required by your CPU. For a computer with a 64 bit Amd CPU inside, for example, use the following command:
<syntaxhighlight lang="bash">
rm TDE.options
ln -s TDE.options.x86_64 TDE.options
</syntaxhighlight>
* Move to the directory where script '''TDE.SlackBuild''' is located.
<syntaxhighlight lang="bash">
cd ./tde_build_script/bin
</syntaxhighlight>
* If you wish to build all of the localization packages together with the base ones, update the main build script '''tde_build_script/bin/TDE.SlackBuild''' turning lines
<syntaxhighlight lang="bash">
# Build package
# bash ./${PKG}.SlackBuild
</syntaxhighlight>
into
<syntaxhighlight lang="bash">
# Build package
bash ./${PKG}.SlackBuild
</syntaxhighlight>
* Run the main script and wait patiently for its conclusion:
<syntaxhighlight lang="bash">
sh ./TDE.SlackBuild
</syntaxhighlight>
The script will build each and every package in the base, library and prerequisite group then install and configure them. A full installation will require several hours. When the script will finish, TDE will be installed and ready for use. The script will stop before its programmed conclusion only when encountering issues such as a missing dependency packages, a missing build tool or something similar.
* Check the Trinity Desktop Environment installation running the '''startx''' command to load the graphical interface.
* Last, whoever usually starts its Linux box in GUI mode should close the TDE session and revert the runlevel to 4:
<syntaxhighlight lang="bash">
init 4
</syntaxhighlight>
----
=== The Updated Build Tree ===
The updated build tree can be downloaded from the following link: [http://www.giustetti.net/resource/slackbuild/tde/1415/tde_build_tree_sg-14.1.5.tar.xz tde_build_tree_sg-14.1.5.tar.xz]. The tar archive includes every and each SlackBuild script, patch and configuration file. The archive will be updated in the future if and when patches for the '''LibTQt-Perl''' package will be released. The package will be unusable until then.
----
== CONCLUSIONS ==
This web page includes brief instructions to successfully install TDE 14.1.5 on Slackware Linux from source code. Al of the scripts were provided along with some example commands. All the of the build, installation, configuration and subsequent use tests were conducted on '''64 and 32 bits AMD CPUs running an up to date version of Slackware Linux 15.0'''. In conclusion, the deserved praises to all of the '''TDE''' developers for their commitment and efforts are renewed. Check back in a semester for the usual update.
For any feedback, questions, errors and such, please e-mail me at ''studiosg [at] giustetti [dot] net''
External links
----
* [http://www.slackware.com Slackware home page]
* [http://arm.slackware.com Slackware Linux for the ARM architecture]
* [http://www.trinitydesktop.org TDE home page]
* [https://mirror.ppa.trinitydesktop.org/trinity/releases/R14.1.5/downloads.html TDE download links]
* [https://wiki.trinitydesktop.org/Release_Notes_For_R14.1.5 TDE 14.1.5 release notes]
----
{{footer_en | link_page=trinity_desktop_environment_14.1.5}}