En/Trinity desktop environment 14.1.5

From Studiosg
Jump to navigationJump to search

Welcome to Simone Giustetti's wiki pages.


Languages: English - Italiano


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 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:

  Error: The TQt version number could not be determined by parsing /opt/trinity/include/tqglobal.h.

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:

   ...
   # 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)
   ...

Header file tqglobal.h contains but a few lines of actual code:

   #ifndef TQT_TQGLOBAL_H
   #define TQT_TQGLOBAL_H
   
   #include <tqt.h>
   #include <ntqglobal.h>
   
   #endif /* TQT_TQGLOBAL_H */

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:

   *** 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")

then updating the SlackBuild script adding some lines to apply the tentative patch to the source code:

   # Patch the configure.py script for the right configuration.
   patch -p0 -i ${SRCDIR}/configure.patch

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 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.
  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.
  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 ..
  -rw-r--r--  1 root root 2.2K Apr  3  2025 Ast.pm
  -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:

   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}

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.
  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.
  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:

   *** ./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" }} ) {

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:

   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*)
         |

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:
   init 3
  • Remove all previously installed TDE packages. To remove release 14.1.4, for example, execute command:
   removepkg /var/log/packages/*trinity-14.1.4*
  • Delete configuration scripts left over by the removepkg command.
   rm /etc/profile.d/tqt3.*
   rm /etc/profile.d/trinity.*
  • 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 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 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:
   rm TDE.options
   ln -s TDE.options.x86_64 TDE.options
  • Move to the directory where script TDE.SlackBuild is located.
   cd ./tde_build_script/bin
  • 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
      # Build package
   #   bash ./${PKG}.SlackBuild

into

      # Build package
      bash ./${PKG}.SlackBuild
  • Run the main script and wait patiently for its conclusion:
   sh ./TDE.SlackBuild

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:
   init 4

The Updated Build Tree

The updated build tree can be downloaded from the following link: 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





Languages: English - Italiano