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

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



--=-Nq65m7sM2GaofoKVHHN0
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) (77.41.63.43)
> >=20
> >=20
> > This patch adds a CMake buildsystem for LMDB, side-by-side with
> > existing
> > Makefile.
> > It builds the same targets except coverage tests.
>=20
> 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
> >=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).
>=20
> 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
> >=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.
>=20
> 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.

>=20
> 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.

>=20
> 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.

>=20
> 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
>=20
> 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.
>=20

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.

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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAABCgAGBQJXt8N1AAoJEHveF8jk4w6dxNMP/0rbPnFVC6SP7ouTI8XhSdRq
YmTl5f3clANv29PV5d6VpEROrbom0Exw07oBFIo4pN01Wo8/Gc48P/2NWZhO+IIZ
qvhxTjatCIIZWviZprzQqQK/1VaH4F0IPA7vDHTZGu6G6OHHw70rKIWRh00x0K46
PZfmHZCN5akfdWVniX/Uc7RplAFyOzrnZZRfulfNPPCgwtwoenJ6mO0k4zWwJtP8
Yk/ipwHpXFAkuU5UQ0ObHJfmcCSebFEt53knDfUV7u2aBg24bFTMK0IfX3RuNN1D
/fAV0WuoMS6HtTEfaOiUtlemjejxiOxCHFwHbe31Q2XgO3fSOuyv3qrdJCBKwJAX
8/MUbTf2RRA5pdAgiELEZ8o3mMuf0Gjs9BYC+Who5F+cy/3v0ga44MmRZwjtRZre
7h9GeqcgInNtRj9eYOeHPmSdLh8v/6RJRm7OQ/NkeFcKQdooMqd0vsbCWSWkdpyo
rb3opd+mv8iRM6rVpEOyQDfWEguVIhemUB6g5/jyjO3tAcjIhwxnImvPTJXjNB9z
OmTwnoVezixG8cJ6dYZYr3tSq7okBJd3DjTyxpB5VkWcp12+59vBLfkVrhEzA7Qw
fMOPItN/2FymaLsh2kYv3jVLCl3r2hQ+LP2rPD4NWTC5MLcsxRCgJLfTvrALuRp0
IJCyUdAOf+xXzd6VF53n
=Ln4x
-----END PGP SIGNATURE-----

--=-Nq65m7sM2GaofoKVHHN0--