External Dependencies

From Crypto++ Wiki
Jump to navigation Jump to search

Crypto++ is a stand alone C++ library of cryptographic algorithms and schemes. The library has minimal external requirements and dependencies, and that's a design choice. The library does not require Autotools, Boost, Cmake or other external dependencies.

As far as we know, the only requirements are:

  • Portable make, like GNU Make
  • C++03
  • namespace support
  • exception support

A portable, non-anemic make is required because the library's GNUmakefile uses features like the shell. Posix's make does not suffice.

Namespace and exception support may seem a bit odd, but old versions of compilers and libraries sometimes lacked them. For example, Microsoft's eVC++ 4.1 (embedded Visual C++) from the early 1990s lacked exceptions.

Autotools

Crypto++ does not use Autotools because its an external dependency. This is somewhat unique in the free software world, but Crypto++ configuration information resides in GNUmakefile and config.h.

We have experimental support for Autoconf and Automake at cryptopp-autotools. The GitHub repo is based on the work of László Böszörményi at Debian. Böszörményi is maintaining a set of Autotools file for Crypto++ used by Debian and Fedora.

Prior to the Crypto++ 6.0 release we broke László's configure.ac and Makefile.am. It broke when we switched to the Base+SIMD compilation model, where a base file provides a C++ implementation and a SIMD file provides a hardware accelerated implementation. The base file gets standard CXXFLAGS, but the SIMD file gets architectural flags, like ARMv8, SSE4 and AES.

We are fortunate that László Böszörményi has accepted a Collaborator role on cryptopp-autotools. When he encounters problems on Debian the changes fixes should appear immediately in the GitHub repo.

Boost

Crypto++ does not use Boost because its an external dependency. The library depends upon a semi-modern C++ Standard Library, and to date, GNU's stdlibc++, LLVM's libc++, Dinkumware, and STLport provide them.

The library would be happy to provide Boost as an option for users. Please discuss it on the Mailing List or open a Bug Report. To claim Crypto++ supports Boost, the library will need test environments and test cases. Please be sure to call out the test environment (and its configuration), and specify test cases to validate the configurations (also see Release Testing).

CMake

Crypto++ provides experimental CMake project files at cryptopp-cmake. Initial Cmake support was provided by Alexander Shishenko and added at Crypto++ 5.6.4. See Pull request 77 and Commit a2c1e49a01b5f286 for details.

The initial project files were a great start but we let Shishenko down. We did not have Cmake expertise so the project was not very helpful in improving Cmake. The community did not work to improve Cmake either, so the files mostly remained stagnant.

Cmake accumulated too many bug reports on platforms from Android to Windows Phone. Too many off-color hacks were used to address problem (sometimes incorrectly), and we eventually removed Cmake from the Crypto++ sources. See CMake Removal on the wiki for details.

If you have Cmake expertise then please help move the Cmake source files forward.