You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Interface dependencies act up when attempting to use libadwaita in a C++ package. No amount of tweaking resolves the situation, whether switching from c to cc or trying various methods to export (cc.export.libs, c.export.libs, etc.).
error: interface dependency /usr/lib64/liba{gtk4}@/usr/bin/g++/ is unknown
info: mentioned in*.export.libs of target ../foo-gcc/libadwaita-1.5.0+4/libadwaita/libs{adwaita}
info: is it a prerequisite of ../foo-gcc/libadwaita-1.5.0+4/libadwaita/libs{adwaita}?
info: while applying rule cxx.compile to update ../foo-gcc/libfoo/libfoo/objs{foo}
info: while applying rule cxx.link to update ../foo-gcc/libfoo/libfoo/libs{foo}
info: while applying rule cxx.link to update ../foo-gcc/foo/foo/exe{foo}
info: while applying rule build.alias to update ../foo-gcc/foo/dir{foo/}
info: while applying rule build.alias to update ../foo-gcc/dir{foo/}
error: interface dependency /usr/lib64/libs{gtk4}@/usr/bin/g++/ is unknown
info: mentioned in*.export.libs of target ../foo-gcc/libadwaita-1.5.0+4/libadwaita/liba{adwaita}
info: is it a prerequisite of ../foo-gcc/libadwaita-1.5.0+4/libadwaita/liba{adwaita}?
info: while applying rule cxx.compile to update ../foo-gcc/libfoo/libfoo/obja{foo}
info: while applying rule cxx.link to update ../foo-gcc/libfoo/libfoo/liba{foo}
info: while applying rule bin.lib to update ../foo-gcc/libfoo/libfoo/lib{foo}
info: while applying rule build.alias to update ../foo-gcc/libfoo/dir{libfoo/}
info: while applying rule build.alias to update ../foo-gcc/dir{libfoo/}
Attempting a minimal C library linked in a C++ project setup works, so I suspect there's something else I'm missing, or perhaps there's something unusual in the GTK pkg-config file. For now, the workaround involves forcing config.c to use g++:
#!/usr/bin/env bashif! cat /etc/os-release | grep -q "Fedora";thenecho"Warning: Your distribution is not Fedora, which may result in outdated GTK."fiset -x
bdep new -t empty foo
bdep new -t empty bar
bdep new -t empty baz
cd foo
bdep new --package -l c++ -t exe foo
bdep new --package -l c++ -t lib libfoo
cd ../bar
bdep new --package -l c -t lib libbar
cd ../baz
bdep new --package -l c -t lib libbaz
cd ..
# Configure dependencies repositories
cat <<EOF > foo/repositories.manifest: 1summary: foo project repository:role: prerequisitelocation: ../bar.git#main:role: prerequisitelocation: https://github.com/build2-packaging/libadwaita.git#main#:#role: prerequisite#location: ../libadwaita.git#mainEOF
cat <<EOF > bar/repositories.manifest: 1summary: bar project repository:role: prerequisitelocation: ../baz.git#mainEOF# Update dependency declarations in project manifests.
sed -i 's/#depends: libhello \^1\.0\.0/depends: libfoo == $/' foo/foo/manifest
sed -i 's/#depends: libhello \^1\.0\.0/depends: libbar\ndepends: libadwaita/' foo/libfoo/manifest
sed -i 's/#depends: libhello \^1\.0\.0/depends: libbaz/' bar/libbar/manifest
# Update dependency declarations in packages buildfile
sed -i 's/#import libs += libhello%lib{hello}/import libs += libfoo%lib{foo}/' foo/foo/foo/buildfile
sed -i 's/#import xxxx_libs += libhello%lib{hello}/import intf_libs += libbar%lib{bar} libadwaita%lib{adwaita}/' foo/libfoo/libfoo/buildfile
sed -i 's/#import xxxx_libs += libhello%lib{hello}/import intf_libs += libbaz%lib{baz}/' bar/libbar/libbar/buildfile
# Disable tests in bar.
rm -rf bar/libbar/tests
# Override bar source code to export "hello"
cat <<EOF > bar/libbar/libbar/bar.c#include <libbar/bar.h>inthello (){ return 0;}EOF
cat <<EOF > bar/libbar/libbar/bar.h#pragma once#include <libbar/export.h>#ifdef __cplusplusextern "C"{#endifLIBBAR_SYMEXPORT inthello ();#ifdef __cplusplus}#endifEOF# Override foo source code to import "hello" and "adw_init" from bar and libadwaita, respectively.
cat <<EOF > foo/libfoo/libfoo/foo.cxx#include <libfoo/foo.hxx>#include <libbar/bar.h>#include <adwaita.h>#include <ostream>#include <stdexcept>using namespace std;namespace foo{ void say_hello (ostream& o, const string& n) { hello (); adw_init(); if (n.empty ()) throw invalid_argument ("empty name"); o << "Hello, " << n << '!' << endl; }}EOF# Commit above sed operations.cd foo
git add .
git commit -m "Initial commit"cd ../bar
git add .
git commit -m "Initial commit"cd ../baz
git add .
git commit -m "Initial commit"# Now we'll attempt to build foo along with its dependencies.#cd ../foo
c='\e[1;33m'
r='\e[1;0m'set +x
echo -e "$(cat <<EOM${c}Initial attempt.${r}EOM)"set -x
bdep init -C @gcc cc
bdep update
set +x
echo -e "$(cat <<EOM${c}Second attempt. Force config.c to `g++`${r}EOM)"set -x
rm -rf .bdep/
bdep init -C @gcc cc config.c=g++ --wipe
bdep update
set +x
Interface dependencies act up when attempting to use libadwaita in a C++ package. No amount of tweaking resolves the situation, whether switching from c to cc or trying various methods to export (cc.export.libs, c.export.libs, etc.).
Attempting a minimal C library linked in a C++ project setup works, so I suspect there's something else I'm missing, or perhaps there's something unusual in the GTK pkg-config file. For now, the workaround involves forcing config.c to use g++:
Also related: https://cpplang.slack.com/archives/CDJ0Z991S/p1720210865895529?thread_ts=1710423736.413539&cid=CDJ0Z991S
The text was updated successfully, but these errors were encountered: