The officially official Devuan Forum!

You are not logged in.

#1 2025-05-09 11:40:35

igorzwx
Member
Registered: 2024-05-06
Posts: 130  

Hacking Build-Depends of Debian source packages

There might be obstacles on the road to freedom. You may get problems like this:

$ dpkg-buildpackage -b
...
fatal error: toml++/toml.hpp: No such file or directory
    2 | #include "toml++/toml.hpp" 

To overcome this obstacle you can simply borrow "toml++/toml.hpp" from Debian testing and compile the package you need on Devuan stable. For some strange reason, this method usually works.

You can find "toml++/toml.hpp" in  a Debian (testing=trixie) package:

Package: libtomlplusplus-dev (3.4.0+ds-0.2 and others)
_https://packages.debian.org/trixie/libtomlplusplus-dev

$ tree -L 4 libtomlplusplus-dev_3.4.0+ds-0.2+b1_amd64
libtomlplusplus-dev_3.4.0+ds-0.2+b1_amd64
├── DEBIAN
│   ├── control
│   └── md5sums
└── usr
    ├── include
    │   └── toml++
    │       ├── impl
    │       ├── toml.h
    │       └── toml.hpp
    ├── lib
    │   └── x86_64-linux-gnu
    │       ├── cmake
    │       ├── libtomlplusplus.so -> libtomlplusplus.so.3
    │       └── pkgconfig
    └── share
        ├── doc
        │   └── libtomlplusplus-dev
        └── doc-base
            └── libtomlplusplus-dev.tomlplusplus 

You can download this package, and extract "usr" to a folder like this:

$HOME/.CTools/LIBS/
$HOME/.CTools/LIBS/usr/include/toml++/toml.hpp 

Then you can add "$HOME/.CTools/LIBS/usr/include" to $CPLUS_INCLUDE_PATH

The secret knowledge is here:
_https://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html

It is very simple:

$ echo $CPLUS_INCLUDE_PATH
                           # It is empty

$ export CPLUS_INCLUDE_PATH="$HOME/.CTools/LIBS/usr/include" 

Verify the INCLUDE_PATH for g++ with a secret command:

echo | gcc -Wp,-v -xc++ - -fsyntax-only
$ echo | gcc -Wp,-v -xc++ - -fsyntax-only
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/12"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:

 /home/<YOUR USER NAME>/.CTools/LIBS/usr/include
 /usr/include/c++/12
 /usr/include/x86_64-linux-gnu/c++/12
 /usr/include/c++/12/backward
 /usr/lib/gcc/x86_64-linux-gnu/12/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list. 

Now everything works. The "fatal error" had gone away.

The question remains: why does this method work. It looks like they do not update software on Debian stable. They have restricted resources, and, of course, they have to fix problems caused by systemd, pipewire and pulseaudio.

Last edited by igorzwx (2025-05-09 12:45:56)

Offline

Board footer