[build2] Kconfig support in build2

Matthew Krupcale mkrupcale at matthewkrupcale.com
Tue Jan 26 17:16:01 UTC 2021


On Fri, Jan 22, 2021 at 4:38 AM Boris Kolpackov <boris at codesynthesis.com> wrote:
>
> Yes, while I am not very familiar with RPM/Fedora packaging, the
> overall idea is that libbuild2-kconfig should have a hard dependency
> on build2 with a fairly tight version constraint (e.g., == X.Y.*).

libbuild2-kconfig will have an automatically generated RPM Requires:
dependency on the libbuild2 SONAME that it uses during the build:

# rpm -q --requires
/builddir/build/RPMS/libbuild2-kconfig-0.1.0-1.a.0.20210108084836.3687e4b95226.fc34.x86_64.rpm
libbuild2-0.14.0-a.0.bbf3c05a0827.so()(64bit)

So I think that constraint should be satisfied.

> And build2 should have a soft reverse-dependecy on libbuild2-kconfig
> (e.g., "recommends" on Debian).

Yes, good idea. RPM also has weak dependencies[1], so I'll add a
Recommends: libbuild2-kconfig to the build2 package once the
libbuild2-kconfig package is approved.

> I think the best place is to get it as part of build2-toolchain (see
> the above note for details).

I'm currently[2] using the tarballs at
https://stage.build2.org/1/build2/ since I'd like to use the
individual project tarballs for the respective Fedora package.

One thing I noticed is that building libbuild2-kconfig[3] required
building twice: once with the project's buildfile compiler arguments
and once additionally with the config.* CLI provided arguments:

+ cd libbuild2-kconfig-0.1.0
+ /usr/bin/b config.bin.lib=shared config.bin.rpath.auto=false
config.bin.rpath_link.auto=false 'config.c.coptions=-O2 -flto=auto
-ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
-Wp,-D_GLIBCXX_ASSERTIONS
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
 -m64  -mtune=generic -fasynchronous-unwind-tables
-fstack-clash-protection -fcf-protection' 'config.cxx.coptions=-O2
-flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
-pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
-Wp,-D_GLIBCXX_ASSERTIONS
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
 -m64  -mtune=generic -fasynchronous-unwind-tables
-fstack-clash-protection -fcf-protection'
'config.cc.loptions=-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld '
libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/
libbuild2-kconfig-tests-0.1.0-a.0.20210108084836.3687e4b95226/
config.bin.lib=both
'!config.import.libbuild2_kconfig=libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/'
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{lexer.lex}
c++ libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/cxx{init}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{parser.tab}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{confdata}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{preprocess}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{confapi}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{util}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{expr}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{symbol}
ld libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/libs{build2-kconfig}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{lexer.lex}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{parser.tab}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{parser.tab}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{lexer.lex}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{confdata}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{confdata}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{preprocess}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{preprocess}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{confapi}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{confapi}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{util}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{util}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{expr}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{expr}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{symbol}
c libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/c{symbol}
c++ libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/cxx{init}
c++ libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/cxx{init}
ld libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/libs{build2-kconfig}
ar libbuild2-kconfig-0.1.0-a.0.20210108084836.3687e4b95226/libbuild2/kconfig/liba{build2-kconfig}
info: dir{libbuild2-kconfig-tests-0.1.0-a.0.20210108084836.3687e4b95226/}
is up to date

Is this expected since libbuild2-kconfig requires bootstrap[4]?

[1] https://docs.fedoraproject.org/en-US/packaging-guidelines/WeakDependencies/
[2] https://copr.fedorainfracloud.org/coprs/mkrupcale/build2/build/1897475/
[3] https://download.copr.fedorainfracloud.org/results/mkrupcale/build2/fedora-rawhide-x86_64/01897475-libbuild2-kconfig/builder-live.log.gz
[4] https://github.com/build2/libbuild2-hello#developing-modules-that-require-bootstrapping



More information about the users mailing list