[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#8483) CMake buildsystem support for LMDB

Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On 2016-08-20 at 03:32 +0100, Howard Chu wrote:
> intelfx@intelfx.name wrote:
> >=20
> > Full_Name: Ivan Shapovalov
> > Version: LMDB 0.9.18
> > OS: GNU/Linux
> > URL: ftp://ftp.openldap.org/incoming/ivan-shapovalov-160820.patch
> > Submission from: (NULL) (
> >=20
> >=20
> > This patch adds a CMake buildsystem for LMDB, side-by-side with
> > existing
> > Makefile.
> > It builds the same targets except coverage tests.
> I am not a fan of CMake. Using it requires learning a whole new set
> of=C2=A0
> documentation in addition to knowing the rules of Make. It comes with
> a huge=C2=A0
> footprint of dependencies, and most people using it are misusing it.

Mastering CMake is a lot easier than just learning to use Make...

> >=20
> > Rationale for this change: CMake simplifies building of LMDB with
> > non-standard
> > toolchains
> > such as Android NDK which only support their custom buildsystem and
> > CMake (via
> > a
> > provided CMake toolchain configuration file).
> Building for Android is trivial using e.g. agcc
> https://gist.github.com/angad/1033321

This "agcc" has all flags hard-coded and simply does not work with
third-party NDKs such as CrystaX NDK, which is exactly the point I'm
trying to make.

> >=20
> > This way, one does not need to extract required compiler flags
> > manually.
> > Moreover, this simplifies life for projects which use CMake and
> > LMDB, because a
> > proper CMake buildsystem allows to e. g. automatically pass
> > transitive
> > dependencies like pthreads to dependent projects.
> Using agcc allows one to build for Android any project that simply
> uses Make,=C2=A0
> which was 100% of them before CMake came along.

This is false, as shown above.

> Transitive dependencies like pthreads, which you have now embedded
> into your=C2=A0
> CMakeLists.txt file, are actually compiler and platform dependent.
> That's why=C2=A0
> the LMDB Makefile sets it in an overridable macro, that a programmer
> can=C2=A0
> easily change on the commandline when invoking make on their chosen
> build=C2=A0
> platform.

True; this can be fixed.

> Rejecting this patch and all future patches involving CMake. We will
> not use=C2=A0
> this tool ourselves and we will not maintain files that it uses in
> the LMDB=C2=A0
> source tree.

If you don't like CMake out of personal motives, please just say so and
don't cover it with made-up reasons.

> If you need to integrate LMDB into a particular CMake-based project,
> it's a=C2=A0
> lot simpler than this. E.g.,
> https://github.com/LMDB/bitmonero/blob/master/external/db_drivers/lib
> lmdb/CMakeLists.txt
> There's no reason to duplicate the entire Makefile when you're
> embedding LMDB=C2=A0
> into some other project. This also shows the correct way to use CMake
> and=C2=A0
> propagate threads dependencies.

This file does not cover packaging and exporting targets, which is
crucial when building multiple dependent projects in a staging tree (e.
g. cross-compiling stuff). You see, it is easier to have a single
correct build script in the upstream repo than to have many ad-hoc
build scripts in each project, each deficient in its own regard.

Ivan Shapovalov / intelfx /
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

Version: GnuPG v2