--=-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
--=-Nq65m7sM2GaofoKVHHN0--