Index | Thread | Search

From:
Kurt Mosiejczuk <kmos@openbsd.org>
Subject:
Re: [update] lmdb-1.0.0 (BREAKING CHANGES)
To:
ports@openbsd.org, Aisha Tammy <aisha@openbsd.org>, Rafael Sadowski <rsadowski@openbsd.org>, Marc Espie <espie@openbsd.org>, Otto Moerbeek <otto@drijf.net>, Antoine Jacoutot <ajacoutot@openbsd.org>
Date:
Mon, 6 Jul 2026 07:03:43 -0400

Download raw body.

Thread
  • Jeremie Courreges-Anglas:

    [update] lmdb-1.0.0 (BREAKING CHANGES)

  • Kurt Mosiejczuk:

    [update] lmdb-1.0.0 (BREAKING CHANGES)

  • On Fri, Jul 03, 2026 at 05:23:10PM +0200, Jeremie Courreges-Anglas wrote:
    
    > The update to lmdb-1.0.0 introduces a major incompatibility.  The old
    > and the new formats are not compatible and the new code can't read old
    > databases.  So the update below also builds and packages the old
    > mdb_dump-0.9 code so that people can dump their old databases to a
    > textual representation that can then be fed to the new mdb_load(1)
    > program.
    
    > All consumers still build on arm64.  I have cc'd the maintainers of
    > the consumers of the lmdb port, even though I'm not sure which ports
    > will need manual dump/loads.  Make sure you have proper backups in
    > case the migration process breaks and you need to go back to the
    > previous code.  I'd really love some input from anyone going who went
    > from through the migration, whatever amount of actions you needed.
    
    > Thanks Stuart for the heads-up and the links:
    > https://marc.info/?l=postfix-users&m=178300663467720&w=2 (https://marc.info/?l=postfix-users&m=178300663467720&q=p5)
    > https://github.com/LMDB/lmdb/commit/b7c68db29c33a26d92f6c0cdae7550211350b5fe
    
    I don't know that anything uses the lmdb part of lwjgl3 anyway, but it
    still builds fine and works great with this change.
    
    ok kmos
    
    --Kurt
    
    > 
    > Index: Makefile
    > ===================================================================
    > RCS file: /home/cvs/ports/databases/lmdb/Makefile,v
    > diff -u -p -r1.18 Makefile
    > --- Makefile	14 Sep 2025 16:27:47 -0000	1.18
    > +++ Makefile	3 Jul 2026 12:55:21 -0000
    > @@ -1,11 +1,13 @@
    >  COMMENT =	Symas Lightning Memory-Mapped Database
    >  
    > -VERSION =	0.9.33
    > +VERSION =	1.0.0
    > +OVERSION =	0.9.35
    >  
    >  DISTNAME =	openldap-LMDB_${VERSION}
    >  PKGNAME =	lmdb-${VERSION}
    > +DISTFILES.old =	openldap-LMDB_${OVERSION}${EXTRACT_SUFX}
    >  
    > -SHARED_LIBS +=  lmdb                      0.0 # 0.0
    > +SHARED_LIBS +=  lmdb                      1.0
    >  
    >  CATEGORIES =	databases
    >  
    > @@ -19,23 +21,43 @@ PERMIT_PACKAGE =	Yes
    >  WANTLIB += c pthread
    >  
    >  SITES =	https://git.openldap.org/openldap/openldap/-/archive/LMDB_${VERSION}/
    > +SITES.old =	https://git.openldap.org/openldap/openldap/-/archive/LMDB_${OVERSION}/
    > +PORTROACH=	site:https://github.com/LMDB/lmdb/archive/
    >  
    >  DEBUG_PACKAGES =	${BUILD_PACKAGES}
    >  
    >  USE_GMAKE =		Yes
    >  
    > -MAKE_FLAGS =		CC="${CC}" XCFLAGS="${CFLAGS}" \
    > -			SHARED_VERSION_MAJOR=${LIBlmdb_VERSION:R} \
    > -			SHARED_VERSION_MINOR=${LIBlmdb_VERSION:E}
    > +MAKE_FLAGS =		CC="${CC}" OPT="${CFLAGS}" LDL="" \
    > +			LIBVER=${LIBlmdb_VERSION:R} \
    > +			ABIVER=${LIBlmdb_VERSION:E} \
    > +			mandir=${PREFIX}/man
    >  
    >  WRKDIST =		${WRKDIR}/openldap-LMDB_${VERSION}/libraries/liblmdb
    > +OWRKDIST =		${WRKDIST}/lmdb-0.9
    >  
    >  SUBST_VARS +=	VERSION
    >  
    > -# lmdb.pc: https://bugs.openldap.org/show_bug.cgi?id=10203
    > +post-extract:
    > +	mv ${WRKDIR}/openldap-LMDB_${OVERSION}/libraries/liblmdb ${OWRKDIST}
    > +
    > +post-build:
    > +	cd ${OWRKDIST}; \
    > +	    ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} ${MAKE_FLAGS} \
    > +	    -f ${MAKE_FILE} mdb_dump mtest
    > +
    > +post-test:
    > +	cd ${OWRKDIST}; \
    > +	    mkdir -p testdb testrestore; \
    > +	    ./mtest; \
    > +	    ./mdb_dump testdb | ${WRKBUILD}/mdb_load testrestore
    > +
    >  post-install:
    > -	! test -e ${PREFIX}/lib/pkgconfig/lmdb.pc # fail if shipped upstream
    > +	${INSTALL_DATA} ${WRKBUILD}/lmdb.pc ${PREFIX}/lib/pkgconfig/lmdb.pc
    > +	${INSTALL_PROGRAM} ${OWRKDIST}/mdb_dump ${PREFIX}/bin/mdb_dump-0.9
    > +	${INSTALL_DATA} ${OWRKDIST}/mdb_dump.1 ${PREFIX}/man/man1/mdb_dump-0.9.1
    >  	${SUBST_CMD} -c -o ${SHAREOWN} -g ${SHAREGRP} -m ${SHAREMODE} \
    >  	    ${FILESDIR}/lmdb.pc.in ${PREFIX}/lib/pkgconfig/lmdb.pc
    > +	-diff -u ${WRKBUILD}/lmdb.pc ${PREFIX}/lib/pkgconfig/lmdb.pc
    >  
    >  .include <bsd.port.mk>
    > Index: distinfo
    > ===================================================================
    > RCS file: /home/cvs/ports/databases/lmdb/distinfo,v
    > diff -u -p -r1.7 distinfo
    > --- distinfo	14 Sep 2025 16:27:47 -0000	1.7
    > +++ distinfo	3 Jul 2026 12:55:21 -0000
    > @@ -1,2 +1,4 @@
    > -SHA256 (openldap-LMDB_0.9.33.tar.gz) = R2gB9SOciMfeYcM5BQKl0Tll7O3vgBBbX7D8uDc9HlM=
    > -SIZE (openldap-LMDB_0.9.33.tar.gz) = 149281
    > +SHA256 (openldap-LMDB_0.9.35.tar.gz) = DQkManyFpPMaKrDXNFVMIQl/JHUjk6GQsOUZlrCPSMQ=
    > +SHA256 (openldap-LMDB_1.0.0.tar.gz) = ph3tEr2cZwA4t3SD3aE7UGhKk6ER5TQh37l5Ykrp9y4=
    > +SIZE (openldap-LMDB_0.9.35.tar.gz) = 149788
    > +SIZE (openldap-LMDB_1.0.0.tar.gz) = 178085
    > Index: files/lmdb.pc.in
    > ===================================================================
    > RCS file: /home/cvs/ports/databases/lmdb/files/lmdb.pc.in,v
    > diff -u -p -r1.2 lmdb.pc.in
    > --- files/lmdb.pc.in	14 Jul 2025 11:29:55 -0000	1.2
    > +++ files/lmdb.pc.in	3 Jul 2026 12:55:21 -0000
    > @@ -1,12 +1,12 @@
    >  prefix=${TRUEPREFIX}
    > -exec_prefix=${prefix}
    > -libdir=${prefix}/lib
    > -includedir=${prefix}/include
    > +exec_prefix=${TRUEPREFIX}
    > +includedir=${TRUEPREFIX}/include
    > +libdir=${TRUEPREFIX}/lib
    >  
    > -Name: lmdb
    > -Description: Lightning memory-mapped database: key-value data store
    > -URL: https://www.symas.com/symas-embedded-database-lmdb
    > +Name: lmdb (OpenLDAP)
    > +Description: OpenLDAP Lightning Memory Mapped Database library
    > +URL: https://www.openldap.org
    >  Version: ${VERSION}
    > +Cflags: -pthread -I${includedir}
    >  Libs: -L${libdir} -llmdb
    >  Libs.private: -lpthread
    > -Cflags: -I${includedir}
    > Index: patches/patch-Makefile
    > ===================================================================
    > RCS file: /home/cvs/ports/databases/lmdb/patches/patch-Makefile,v
    > diff -u -p -r1.2 patch-Makefile
    > --- patches/patch-Makefile	10 Mar 2022 00:04:05 -0000	1.2
    > +++ patches/patch-Makefile	3 Jul 2026 12:55:21 -0000
    > @@ -1,7 +1,7 @@
    >  Index: Makefile
    >  --- Makefile.orig
    >  +++ Makefile
    > -@@ -18,21 +18,22 @@
    > +@@ -18,11 +18,10 @@
    >   # There may be other macros in mdb.c of interest. You should
    >   # read mdb.c before changing any of them.
    >   #
    > @@ -12,43 +12,18 @@ Index: Makefile
    >   THREADS = -pthread
    >  -OPT = -O2 -g
    >   CFLAGS	= $(THREADS) $(OPT) $(W) $(XCFLAGS)
    > - LDLIBS	=
    > - SOLIBS	=
    > --SOEXT	= .so
    > --prefix	= /usr/local
    > -+SHARED_VERSION_MAJOR ?= 0
    > -+SHARED_VERSION_MINOR ?= 0
    > -+SOEXT	= .so.$(SHARED_VERSION_MAJOR).$(SHARED_VERSION_MINOR)
    > -+prefix	= ${LOCALBASE}/
    > - exec_prefix = $(prefix)
    > - bindir = $(exec_prefix)/bin
    > - libdir = $(exec_prefix)/lib
    > - includedir = $(prefix)/include
    > --datarootdir = $(prefix)/share
    > -+datarootdir = $(prefix)
    > - mandir = $(datarootdir)/man
    > + LDFLAGS = $(THREADS)
    > + LDLIBS	= 
    > +@@ -69,11 +68,7 @@ install: $(ILIBS) $(IPROGS) $(IHDRS)
    > + 	mkdir -p $(DESTDIR)$(mandir)/man1
    > + 	for f in $(IPROGS); do cp $$f $(DESTDIR)$(bindir); done
    > + 	for f in $(ILIBS); do cp $$f $(DESTDIR)$(libdir); done
    > +-	for f in $(ILIBS2); do cp $$f $(DESTDIR)$(libdir); \
    > +-		i=`basename -s .$(ABIVER) $$f`; rm -f $(DESTDIR)$(libdir)/$$i; \
    > +-		ln -s $$f $(DESTDIR)$(libdir)/$$i; \
    > +-		i=`basename -s .$(LIBVER) $$i`; rm -f $(DESTDIR)$(libdir)/$$i; \
    > +-		ln -s $$f $(DESTDIR)$(libdir)/$$i; done
    > ++	for f in $(ILIBS2); do cp $$f $(DESTDIR)$(libdir); done
    > + 	for f in $(IHDRS); do cp $$f $(DESTDIR)$(includedir); done
    > + 	for f in $(IDOCS); do cp $$f $(DESTDIR)$(mandir)/man1; done
    >   
    > - ########################################################################
    > -@@ -45,14 +46,14 @@ PROGS	= $(IPROGS) mtest mtest2 mtest3 mtest4 mtest5
    > - all:	$(ILIBS) $(PROGS)
    > - 
    > - install: $(ILIBS) $(IPROGS) $(IHDRS)
    > --	mkdir -p $(DESTDIR)$(bindir)
    > --	mkdir -p $(DESTDIR)$(libdir)
    > --	mkdir -p $(DESTDIR)$(includedir)
    > --	mkdir -p $(DESTDIR)$(mandir)/man1
    > --	for f in $(IPROGS); do cp $$f $(DESTDIR)$(bindir); done
    > --	for f in $(ILIBS); do cp $$f $(DESTDIR)$(libdir); done
    > --	for f in $(IHDRS); do cp $$f $(DESTDIR)$(includedir); done
    > --	for f in $(IDOCS); do cp $$f $(DESTDIR)$(mandir)/man1; done
    > -+	${BSD_INSTALL_DATA_DIR} $(DESTDIR)$(bindir)
    > -+	${BSD_INSTALL_DATA_DIR} $(DESTDIR)$(libdir)
    > -+	${BSD_INSTALL_DATA_DIR} $(DESTDIR)$(includedir)
    > -+	${BSD_INSTALL_DATA_DIR} $(DESTDIR)$(mandir)/man1
    > -+	for f in $(IPROGS); do ${BSD_INSTALL_PROGRAM} $$f $(DESTDIR)$(bindir); done
    > -+	for f in $(ILIBS); do ${BSD_INSTALL_DATA} $$f $(DESTDIR)$(libdir); done
    > -+	for f in $(IHDRS); do ${BSD_INSTALL_DATA} $$f $(DESTDIR)$(includedir); done
    > -+	for f in $(IDOCS); do ${BSD_INSTALL_MAN} $$f $(DESTDIR)$(mandir)/man1; done
    > - 
    > - clean:
    > - 	rm -rf $(PROGS) *.[ao] *.[ls]o *~ testdb
    > Index: patches/patch-lmdb-0_9_mdb_c
    > ===================================================================
    > RCS file: patches/patch-lmdb-0_9_mdb_c
    > diff -N patches/patch-lmdb-0_9_mdb_c
    > --- /dev/null	1 Jan 1970 00:00:00 -0000
    > +++ patches/patch-lmdb-0_9_mdb_c	3 Jul 2026 12:55:21 -0000
    > @@ -0,0 +1,11 @@
    > +Index: lmdb-0.9/mdb.c
    > +--- lmdb-0.9/mdb.c.orig
    > ++++ lmdb-0.9/mdb.c
    > +@@ -5069,6 +5069,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned 
    > + 		/* silently ignore WRITEMAP when we're only getting read access */
    > + 		flags &= ~MDB_WRITEMAP;
    > + 	} else {
    > ++		flags |= MDB_WRITEMAP;
    > + 		if (!((env->me_free_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX)) &&
    > + 			  (env->me_dirty_list = calloc(MDB_IDL_UM_SIZE, sizeof(MDB_ID2)))))
    > + 			rc = ENOMEM;
    > Index: patches/patch-mdb_c
    > ===================================================================
    > RCS file: /home/cvs/ports/databases/lmdb/patches/patch-mdb_c,v
    > diff -u -p -r1.11 patch-mdb_c
    > --- patches/patch-mdb_c	14 Sep 2025 16:27:47 -0000	1.11
    > +++ patches/patch-mdb_c	3 Jul 2026 12:55:21 -0000
    > @@ -3,11 +3,19 @@ enforce MDB_WRITEMAP, because we have no
    >  Index: mdb.c
    >  --- mdb.c.orig
    >  +++ mdb.c
    > -@@ -5055,6 +5055,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned 
    > +@@ -2331,6 +2331,7 @@ mdb_dlist_free(MDB_txn *txn)
    > + #if MDB_RPAGE_CACHE
    > + #if defined(MDB_VL32) || ((MDB_RPAGE_CACHE) & 2) /* Always remap */
    > + #define MDB_REMAPPING(flags)	1
    > ++#error "MDB_REMAPPING is incompatible with MDB_WRITEMAP"
    > + #else
    > + #define MDB_REMAPPING(flags)	((flags) & MDB_REMAP_CHUNKS)
    > + #endif
    > +@@ -6288,6 +6289,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned 
    >   		/* silently ignore WRITEMAP when we're only getting read access */
    >   		flags &= ~MDB_WRITEMAP;
    >   	} else {
    >  +		flags |= MDB_WRITEMAP;
    > + 		/* WRITEMAP has a dummy element to match dirty_room = 1 */
    > + 		size_t dl_size = (flags & MDB_WRITEMAP) ? 2 : MDB_IDL_UM_SIZE;
    >   		if (!((env->me_free_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX)) &&
    > - 			  (env->me_dirty_list = calloc(MDB_IDL_UM_SIZE, sizeof(MDB_ID2)))))
    > - 			rc = ENOMEM;
    > Index: pkg/MESSAGE
    > ===================================================================
    > RCS file: pkg/MESSAGE
    > diff -N pkg/MESSAGE
    > --- /dev/null	1 Jan 1970 00:00:00 -0000
    > +++ pkg/MESSAGE	3 Jul 2026 12:55:21 -0000
    > @@ -0,0 +1,3 @@
    > +LMDB 1.0 is an incompatible update from LMDB 0.9.  Existing databases
    > +have to be converted from the old to the new format using the
    > +mdb_dump-0.9(1) and mdb_load(1) commands provided in this package.
    > Index: pkg/PLIST
    > ===================================================================
    > RCS file: /home/cvs/ports/databases/lmdb/pkg/PLIST,v
    > diff -u -p -r1.4 PLIST
    > --- pkg/PLIST	22 Apr 2024 17:50:04 -0000	1.4
    > +++ pkg/PLIST	3 Jul 2026 12:55:21 -0000
    > @@ -1,5 +1,7 @@
    >  @bin bin/mdb_copy
    > +@bin bin/mdb_drop
    >  @bin bin/mdb_dump
    > +@bin bin/mdb_dump-0.9
    >  @bin bin/mdb_load
    >  @bin bin/mdb_stat
    >  include/lmdb.h
    > @@ -7,6 +9,8 @@ include/lmdb.h
    >  @lib lib/liblmdb.so.${LIBlmdb_VERSION}
    >  lib/pkgconfig/lmdb.pc
    >  @man man/man1/mdb_copy.1
    > +@man man/man1/mdb_drop.1
    > +@man man/man1/mdb_dump-0.9.1
    >  @man man/man1/mdb_dump.1
    >  @man man/man1/mdb_load.1
    >  @man man/man1/mdb_stat.1
    > 
    > 
    > -- 
    > jca
    
    
  • Jeremie Courreges-Anglas:

    [update] lmdb-1.0.0 (BREAKING CHANGES)

  • Kurt Mosiejczuk:

    [update] lmdb-1.0.0 (BREAKING CHANGES)