Dependencies

Back to Pastel

This section summarizes the internal and external dependencies in Pastel.

Dependency graph

The dependencies between Pastel’s sub-libraries and external libraries form an acyclic directed graph. Because of this, Pastel can be used either in its entirety or only as a subset if some functionality is not required. The following dependencies capture the transitively-reduced dependency-graph between the libraries.

Armadillo            --> LAPACK, BLAS
PastelSys            --> Boost, Ranges-v3, Mersenne
PastelGfx            --> PastelMath, PastelGeometry
PastelMath           --> PastelSys, Armadillo
PastelGeometry       --> PastelMath
PastelMatlab         --> Matlab, PastelSys
PastelGeometryMatlab --> PastelGeometry, PastelMatlab
PastelSysMatlab      --> PastelSys, PastelMatlab
PastelMathMatlab     --> PastelMath, PastelMatlab

Library dependencies

Some, but not all, of the sub-libraries of Pastel are dependent on external libraries which must be installed in order to compile and link them. These external libraries are listed here. The detailed dependency relations are visualized in the graph above. The version number that follows the library name is the one that the current version of Pastel was used to develop against. This is useful to know in case a later version breaks backward compatibility.

Boost 1.59

http://www.boost.org/

Boost is licensed under the Boost license. Pastel only uses the template code found in Boost and thus requires no linking with object code. Pastel refers to Boost’s include files in the form boost/operators.hpp.

Ranges-v3

https://github.com/ericniebler/range-v3

Ranges-v3 is used to handle sequences of objects generically. Ranges-v3 is licensed under the Boost Software License.

https://github.com/microsoft/Range-V3-VS2015

As of Visual Studio 2017, Visual Studio requires a specifically modified version of the library, because of insufficient support for the C++ standard.

Threading Building Blocks 4.4

https://www.threadingbuildingblocks.org/

Threading Building Blocks is licensed under the GPLv2 license, with the run-time exception. The latter specifically means that Pastel need not be made GPLv2 although it uses code from the TBB. This is similar to how the license of libstdc++ works. Pastel refers to Threading Building Blocks’s include files in the form tbb/parallel_for.h.

Armadillo 7.950

http://arma.sourceforge.net/

Armadillo is used to interface with LAPACK and BLAS for matrix computations. Pastel refers to Armadillo’s include files in the form armadillo. Armadillo is licensed under the Apache License 2.0.

LAPACK and BLAS

http://www.netlib.org/lapack/

http://www.netlib.org/blas/

LAPACK and BLAS are used for matrix computations, via Armadillo. Under Windows, we provide prebuilt versions of these libraries; these are the same that come with Armadillo. LAPACK is licensed under the Modified BSD license.

Application dependencies

The following applications are used to either build Pastel or to generate its documentation.

Remark 1.7.5

http://kaba.hilvi.org/remark

Remark is used to generate the documentation for Pastel. It is not required to build Pastel.

CMake 3.3

http://www.cmake.org

CMake is used to provide a cross-platform build-system, to generate platform-specific build files. CMake takes in a generic description of the build-process and generates the build-files for a specific platform, such as Visual Studio projects, makefiles, or Xcode projects. The CMake application is required to build Pastel. It is not required to use the built libraries.

Built-in dependencies

The following dependencies do not require any action to build Pastel.

Official Mersenne Twister source code

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html

Pastel integrates a minimally modified version of the official Mersenne Twister source code directly into the PastelSys library. No installation is needed.

Catch

https://github.com/philsquared/Catch

Catch is used for unit-testing. It is integrated into Pastel.