On 2025-05-10 01:56, Stefan Heinzmann via Iup-users wrote: > Hi all, > > I am building the libraries with mixed success on Linux. My problems > appear to originate with the system detection built into tecmake. For a > reason I can't find an explanation for, the Linux kernel version appears > to play a major role. I wonder why, can anyone here enlighten me or > point me to a document with the rationale? > > The problem is that you can't determine the versions of libraries > installed on the system from the kernel version with any reliability. > You can very easily have an up-to-date Ubuntu running on an old kernel, > for example when using containers. Containers don't include a kernel, > they use the kernel on the host. Having older kernels run a newer > distribution in the container is a common situation, and the opposite > also happens. Hence, the kernel version really should have no bearing at > all on the build process. > > Given the tecmake system as it is, I would at least need a simple way to > "fake" or bypass the kernel detection in a way that would match the > distribution used, so that the dependencies are determined correctly. > > I guess I would be able to figure this out from the tecmake sources, but > I was hoping there's an easier way somebody already knows about. > > Thanks for any light you can shed on the matter. > > Cheers > Stefan
G'day Stefan, I've been working to bring GNU/Linux, Lua, and Tecgraf IM/CD/IUP together. I have a SourceForge project called lglicua: L -- Lua G -- GNU/Linux I -- IM C -- CD U -- IUP A -- Assistant https://sourceforge.net/projects/lglicua/ This has been mostly my own project, with help from Tecgraf and PUC-Rio Lua folks. Because it's failed to catch the imagination, I'm only calling it a "beta" version. In practice, https://sourceforge.net/projects/lglicua/files/ shows that releases have spanned early May 2021 to end July 2024. Releases are often connected to Lua and/or LuaRocks releases and/or bugfixes, as I whitelist these versions in the Assistant. You can get a "hello, world" modal dialog box in only two lines: ``` #!/bin/bash ../support/play-lua-tec iup=require("iuplua"); iup.Message("MyApp", "hello, world") ``` You don't specify the GNU/Linux distribution you are using. Lglicua has been tested (briefly) on [as per 0.1-beta2 release]: * Debian/Ubuntu family: - Debian - Kali, - Linux Mint, - MX, and Ubuntu; *Red Hat family: - CentOS, - CentOS-Stream, and - Rocky Whitelisting by name and major version number is used. ** CentOS: Core-7, Stream-8 and Stream-9; ** Debian 12.5; ** Kali 2024.2; ** Linux Mint 19.3, 20.3, 21.3 and newly-released 22; ** MX 23.3_ahs_x64; ** Rocky: 8.10, 9.3 and 9.4; and ** Ubuntu: 22.04.4, 23.10 and 24.04. Linux kernels include 3.10, 4.18, 5.4, 5.14, 5.15, 6.1, 6.5, 6.8, 6.8.11 and 6.9.8. GCC versions span 4.8.5 (CentOS Core-7) to 13.2 (Linux Mint-22 and Ubuntu 24.04). (Although GNU/Linux Mint 22.1 has been released, I haven't tested lflicua against it). ------------------------------------------------ The Tecgraf sources for IM/CD/IUP nominate Ubuntu as the model distribution for GNU/Linux releases. Looking at the sources, there looks to be acknowledgement for many different OSes, especially in "project/src/tecmake.mak". I've looked into dependencies of libraries (GTK etc), and have tailored these according to distribution+release version. -------- To your immediate difficulties: I've encountered very similar problems when preparing lglicua for the wide range of distributions and release versions. Two items stand out: 1. I've replaced the IM/CD/IUP "tecmake.mak" with a rewritten version of my own. This greatly streamlines GNU/Linux support, and, especially, adds support for all kernels 6.x (and, hopefully,) up to 9.x. Library versions have a maze of dependencies, and do refer to non-Linux platforms, so my rewrite may break things on non-GNU/Linux platforms -- but (of course), given that lglicua is, by definition, GNU/Linux, this doesn't matter. In particular, look at GTK selection. The rewritten "tecmake.mak" uses (having just identified "Linux" as "TEC_SYSNAME"): ifneq ($(filter 3 4 5 6 7 8 9, $(TEC_SYSVERSION)), ) USE_GTK3 = Yes else # [...] whereas the Tecgraf-shipped version uses a verbose chain of Makefile "$(findstring ...)" to do the identification, and this chain hasn't been updated to include Kernel 6: ifneq ($(findstring Linux5, $(TEC_UNAME)), ) USE_GTK3 = Yes endif The practical upshot of not identifying Kernel 6.x as being compatible with GTK3 is that tecmake.mak gets confused and lapses back to GTK2, and then library selection and linking break. -------- Newer tecmake.mak: -------- > # Refine GTK default request: Newer GNU/Linux systems get GTK3, > # unless GTK2 is specifically defined. > # 240510: CHANGED in lglicua: We incorporate a modified change of the > # Tecgraf IUP' r5950 change (r4.21->r4.22); the parent tested for > # Linux31, and only selected USE_GTK3 if, in addition, TEC_DIST is > # CentOS. Here, we run this test (and, by extension, the following cygw > # test) if TEC_SYSNAME is Linux, but TEC_SYSVERSION is (effectively) > # less than 4. > ifdef GTK_DEFAULT > ifndef USE_GTK2 > ifneq ($(filter linux Linux, $(TEC_SYSNAME)), ) > ifneq ($(filter 3 4 5 6 7 8 9, $(TEC_SYSVERSION)), ) > USE_GTK3 = Yes > else ifneq ($(filter centos CentOS, $(TEC_DIST)), ) > USE_GTK3 = Yes > endif > else ifneq ($(filter cygw CYGW, $(TEC_UNAME)), ) > USE_GTK3 = Yes > endif > endif > endif -------- Tecgraf-shipped tecmake.mak: -------- > ifneq ($(findstring Linux24, $(TEC_UNAME)), ) > NO_GTK_DEFAULT = Yes > endif > ifeq ($(TEC_UNAME), Linux26) > NO_GTK_DEFAULT = Yes > endif > ifeq ($(TEC_UNAME), Linux26_64) > NO_GTK_DEFAULT = Yes > endif > > ifndef NO_GTK_DEFAULT > ifneq ($(findstring cygw, $(TEC_UNAME)), ) > GTK_DEFAULT = Yes > endif > ifneq ($(findstring CentOS, $(TEC_UNAME)), ) > GTK_DEFAULT = Yes > endif > ifneq ($(findstring Linux, $(TEC_UNAME)), ) > GTK_DEFAULT = Yes > endif > ifneq ($(findstring MacOS, $(TEC_UNAME)), ) > GTK_DEFAULT = Yes > endif > ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) > GTK_DEFAULT = Yes > endif > ifneq ($(findstring SunOS, $(TEC_UNAME)), ) > ifeq ($(TEC_SYSARCH), x86) > GTK_DEFAULT = Yes > endif > endif > endif > > ifdef GTK_DEFAULT > ifndef USE_GTK2 > ifneq ($(findstring Linux5, $(TEC_UNAME)), ) > USE_GTK3 = Yes > endif > ifneq ($(findstring Linux4, $(TEC_UNAME)), ) > USE_GTK3 = Yes > endif > ifneq ($(findstring Linux31, $(TEC_UNAME)), ) > USE_GTK3 = Yes > endif > ifneq ($(findstring cygw, $(TEC_UNAME)), ) > USE_GTK3 = Yes > endif > #Homebrew > #ifneq ($(findstring MacOS10, $(TEC_UNAME)), ) > # USE_GTK3 = Yes > #endif > endif > endif > -------- end of tecmake.mak comparison -------- 2. I had serious trouble trying to match GNU/Linux distributions, Release versions and libraries, so I extended tec_uname to help out: For example, see how WebKit is chosen according to distribution name and version. [There may be redundancies that can be merged/eliminated in a future release.]: $ ./tec_uname webkit > ReportWebkitItems() > { > local I > local L > > # At the time of writing (240726), GetLinuxDistro sets TEC_DISTID, > # but *not* GTK. > GTK="/usr/" > GetLinuxDistro > > # Use short names to keep line lengths under control. > I="${GTK}include/" > L="${GTK}lib/" > > # (Note to self: We rely on the package manager to pull in > # dependencies for the package list only, notably > # libsoup-2.4-dev[el] or libsoup-3.0-dev[el]. However, we probably > # still have to name them explicitly for #include directories.) > case "${TEC_DISTID}" in > centos-core.7 ) > WK_PACKAGES="webkitgtk4-devel" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > centos-stream.8 ) > WK_PACKAGES="webkit2gtk3-devel" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > centos-stream.9 ) > WK_PACKAGES="webkit2gtk3-devel" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > debian.12 ) > WK_PACKAGES="webkit2gtk-4.0-dev" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > kali.2024 ) > WK_PACKAGES="webkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > linuxmint.19 ) > WK_PACKAGES="libwebkit2gtk-4.0-dev" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > linuxmint.20 ) > # LM20.3 does not have wk-4.1 etc. > WK_PACKAGES="libwebkit2gtk-4.0-dev" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > linuxmint.21 ) > WK_PACKAGES="libwebkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > linuxmint.22 ) > WK_PACKAGES="libwebkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > MX.23 ) > WK_PACKAGES="libwebkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > rocky.8 ) > WK_PACKAGES="webkit2gtk3-devel" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > rocky.9 ) > # Works for both Rocky 9.3 and 9.4. > WK_PACKAGES="webkit2gtk3-devel" > WK_INCLUDES="${I}libsoup-2.4 ${I}webkitgtk-4.0" > WK_LIBRARIES="webkit2gtk-4.0" > ;; > > ubuntu.22 ) > WK_PACKAGES="libwebkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > ubuntu.23 ) > WK_PACKAGES="libwebkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > ubuntu.24 ) > WK_PACKAGES="libwebkit2gtk-4.1-dev" > WK_INCLUDES="${I}libsoup-3.0 ${I}webkitgtk-4.1" > WK_LIBRARIES="webkit2gtk-4.1" > ;; > > * ) > echo "Warning:__Ignoring__${TEC_DISTID}" > return 42 > esac > > # ?? WARNING: Several consumers of one-liner output use the text as > # a subfield within another field. While the client could edit out > # the trailing whitespace (Bash or Lua versions), it's easier on > # them, and gives more readable code, if we use "echo -n" here. > > case "$1" in > webkit ) > cat <<EOF > WK_DISTID=${TEC_DISTID} > WK_PACKAGES=${WK_PACKAGES} > WK_INCLUDES=${WK_INCLUDES} > WK_LIBRARIES=${WK_LIBRARIES} > EOF > ;; > > webkit-packages ) > echo -n "$WK_PACKAGES" > ;; > > webkit-includes ) > echo -n "$WK_INCLUDES" > ;; > > webkit-libraries ) > echo -n "$WK_LIBRARIES" > ;; > > default ) > echo "Unknown ReportWebkitItems selection: ${1}" > ;; > esac > } -------- end of tec_uname snippet -------- (There are more build/include/library dependencies in "LGLICUA/svn/assistant-database.lua", but I'll omit these as this message is getting too long.] -- Cheers, sur-behoffski (Brenton Hoff) programmer, Grouse Software _______________________________________________ Iup-users mailing list Iup-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iup-users