Files
buildroot/package/berkeleydb/berkeleydb.mk
Bernd Kuhls 9a1a71be21 package/berkeleydb: fix non-threaded build
Building berkeleydb is broken with a non-threaded toolchain with gcc >=
14.x:

../src/rep/rep_method.c:1740:25: error: implicit declaration of function
 '__repmgr_get_nsites'; did you mean '__rep_get_nsites'?
 [-Wimplicit-function-declaration]
 1740 |                 return (__repmgr_get_nsites(env, n));

According to src/repmgr/repmgr_util.c, line 503+, the function
'__repmgr_get_nsites' mentioned in the gcc error message "may only be
called after threads have been started".
This source file repmgr_util.c belongs to REPMGR_OBJS according to
dist/Makefile.in, line 249+, which is, according to dist/configure.ac,
line 956, only build if thread support is present.

In a non-threaded build '__repmgr_get_nsites' does not exist causing the
build error.

To fix the build error we disable replication for non-threaded
toolchains.

Using gcc 13.x the build error does not occur, tested with this
defconfig:

BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y
BR2_PTHREADS_NONE=y
BR2_GCC_VERSION_13_X=y
BR2_PACKAGE_BERKELEYDB=y

Using this minimal gcc 14.x-based defconfig

BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y
BR2_PTHREADS_NONE=y
BR2_PER_PACKAGE_DIRECTORIES=y
BR2_PACKAGE_BERKELEYDB=y

the build error can be reproduced.

The oldest build error of this kind, afaics, dates back to 2024-06-13:
https://autobuild.buildroot.net/results/e0d/e0d6bdbef01bee277b0da83605b2906af876058a/

Fixes:
https://autobuild.buildroot.net/results/792/792ed942d17bb8d00cd321536a102f6dd63b6a8a/

Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2026-02-02 18:28:52 +01:00

87 lines
2.6 KiB
Makefile

################################################################################
#
# berkeleydb
#
################################################################################
# Since BerkeleyDB version 6 and above are licensed under the Affero
# GPL (AGPL), we want to keep this 'bdb' package at version 5.x to
# avoid licensing issues.
# BerkeleyDB version 6 or above should be provided by a dedicated
# package instead.
BERKELEYDB_VERSION = 5.3.28
BERKELEYDB_SITE = http://download.oracle.com/berkeley-db
BERKELEYDB_SOURCE = db-$(BERKELEYDB_VERSION).NC.tar.gz
BERKELEYDB_SUBDIR = build_unix
BERKELEYDB_LICENSE = BerkeleyDB License
BERKELEYDB_LICENSE_FILES = LICENSE
BERKELEYDB_CPE_ID_VENDOR = oracle
BERKELEYDB_CPE_ID_PRODUCT = berkeley_db
BERKELEYDB_INSTALL_STAGING = YES
BERKELEYDB_BINARIES = db_archive db_checkpoint db_deadlock db_dump \
db_hotbackup db_load db_log_verify db_printlog db_recover db_replicate \
db_stat db_tuner db_upgrade db_verify
# build directory can't be the directory where configure are there, so..
define BERKELEYDB_CONFIGURE_CMDS
(cd $(@D)/build_unix; rm -rf config.cache; \
$(TARGET_CONFIGURE_OPTS) \
CFLAGS="$(TARGET_CFLAGS) -std=gnu99" \
$(TARGET_CONFIGURE_ARGS) \
../dist/configure $(QUIET) \
--target=$(GNU_TARGET_NAME) \
--host=$(GNU_TARGET_NAME) \
--build=$(GNU_HOST_NAME) \
--prefix=/usr \
--exec-prefix=/usr \
--sysconfdir=/etc \
--with-gnu-ld \
$(if $(BR2_INSTALL_LIBSTDCPP),--enable-cxx,--disable-cxx) \
--disable-java \
--disable-tcl \
$(if $(BR2_PACKAGE_BERKELEYDB_COMPAT185),--enable-compat185,--disable-compat185) \
$(if $(BR2_PACKAGE_BERKELEYDB_DBM),--enable-dbm,--disable-dbm) \
$(SHARED_STATIC_LIBS_OPTS) \
--with-pic \
--enable-o_direct \
$(if $(BR2_TOOLCHAIN_HAS_THREADS),--enable-mutexsupport,--disable-mutexsupport) \
$(if $(BR2_TOOLCHAIN_HAS_THREADS),--enable-replication,--disable-replication) \
)
endef
define HOST_BERKELEYDB_CONFIGURE_CMDS
(cd $(@D)/build_unix; rm -rf config.cache; \
$(HOST_CONFIGURE_OPTS) \
CFLAGS="$(HOST_CFLAGS) -std=gnu99" \
../dist/configure $(QUIET) \
--prefix=$(HOST_DIR) \
--with-gnu-ld \
--disable-cxx \
--disable-java \
--disable-tcl \
--disable-compat185 \
--with-pic \
--enable-o_direct \
--disable-mutexsupport \
)
endef
ifneq ($(BR2_PACKAGE_BERKELEYDB_TOOLS),y)
define BERKELEYDB_REMOVE_TOOLS
rm -f $(addprefix $(TARGET_DIR)/usr/bin/, $(BERKELEYDB_BINARIES))
endef
BERKELEYDB_POST_INSTALL_TARGET_HOOKS += BERKELEYDB_REMOVE_TOOLS
endif
define BERKELEYDB_REMOVE_DOCS
rm -rf $(TARGET_DIR)/usr/docs
endef
BERKELEYDB_POST_INSTALL_TARGET_HOOKS += BERKELEYDB_REMOVE_DOCS
$(eval $(autotools-package))
$(eval $(host-autotools-package))